我想获得今天到(今天- 15)天之间的所有瞬间的列表。
我理解我可能需要你使用LazyList如果scala,但我不太熟悉语法,因为我是新的。java的等效值似乎是
Set <Instant> allPossibleDates =
Stream.iterate(today, date -> date.minus(1, ChronoUnit.DAYS))
.limit(numDates)
.collect(Collectors.toSet());
在Scala中等价的是什么?
LazyList
伴侣对象定义了一个iterate
方法,该方法允许您根据起点和步进操作定义一个序列(注意:Iterator
的伴侣对象定义了一个类似的方法):
def iterate[A](start: => A)(f: (A) => A): LazyList[A]
实际上,除了start
和f
参数出现在单独的参数列表中之外,它看起来基本上与Java版本相同。在Scala匿名函数的语法糖中(使用_
表示函数参数),您可以执行
val today = Instant.now() // or whatever
LazyList
.iterate(today) { _.minus(1, ChronoUnit.DAYS) }
.take(15) // equivalent to `limit` in Java
.to(Set) // equivalent to `collect(...)`
还需要注意的是,LazyList定义了iterate
的重载,它接受一个限制,这将取代.take
:
LazyList
.iterate(today, 15) { _.minus(1, ChronoUnit.DAYS) }
.to(Set)
请注意,您可以使用.foreach { instant => /* ... */ }
而不是.to(SomeCollectionCompanion)
来迭代内容,而无需为集合分配内存。