获取Scala中2个瞬间之间的所有瞬间列表



我想获得今天到(今天- 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]

实际上,除了startf参数出现在单独的参数列表中之外,它看起来基本上与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)来迭代内容,而无需为集合分配内存。

相关内容

  • 没有找到相关文章

最新更新