Scala Stream 不断摆脱 var
Scala Stream Contiually get rid of var
我正在尝试通过从当前日期减去一个月来生成无限的日期列表,我想使用 Streams 来完成此操作。
这是我到目前为止所做的:
import org.joda.time.LocalDate
var date = new LocalDate("2022-05-24")
val dateSeq = Seq(date)
val allDates = dateSeq.toStream ++ Stream.continually(dateSeq)
.flatMap(ticks => ticks.map(_ => {
date = date.minusMonths(1)
date
}))
allDates.take(5).toList
我的问题是我每次都使用 var 将当前日期递减一个月。
有什么方法可以摆脱那个 var
吗?
使用@Luis Miguel Mejía Suárez 解决方案:
import org.joda.time.LocalDate
val numberOfMonthsBack = 5
val date = new LocalDate("2022-05-24")
val dateSeq = Seq(date)
val allDates = dateSeq.toStream ++ Stream.continually(dateSeq)
.zip(Stream.from(1))
.flatMap(ticks =>
ticks._1.map(x => x.minusMonths(ticks._2))
)
allDates
.take(numberOfMonthsBack).toList
你只想要 .iterate
而不是 .continually
:
vall allDates = Stream.iterate(LocalDate.now) { _.minusMonth(1) }
我正在尝试通过从当前日期减去一个月来生成无限的日期列表,我想使用 Streams 来完成此操作。
这是我到目前为止所做的:
import org.joda.time.LocalDate
var date = new LocalDate("2022-05-24")
val dateSeq = Seq(date)
val allDates = dateSeq.toStream ++ Stream.continually(dateSeq)
.flatMap(ticks => ticks.map(_ => {
date = date.minusMonths(1)
date
}))
allDates.take(5).toList
我的问题是我每次都使用 var 将当前日期递减一个月。
有什么方法可以摆脱那个 var
吗?
使用@Luis Miguel Mejía Suárez 解决方案:
import org.joda.time.LocalDate
val numberOfMonthsBack = 5
val date = new LocalDate("2022-05-24")
val dateSeq = Seq(date)
val allDates = dateSeq.toStream ++ Stream.continually(dateSeq)
.zip(Stream.from(1))
.flatMap(ticks =>
ticks._1.map(x => x.minusMonths(ticks._2))
)
allDates
.take(numberOfMonthsBack).toList
你只想要 .iterate
而不是 .continually
:
vall allDates = Stream.iterate(LocalDate.now) { _.minusMonth(1) }