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) }