繁体   English   中英

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

[英]Get list of all instants between 2 instants in Scala

我想获得今天和(今天 - 15)天之间所有瞬间的列表。

我知道如果 scala,我可能需要你使用 LazyList,但我不太熟悉语法,因为我是新手。 相当于 java 似乎是

  Set <Instant> allPossibleDates =
    Stream.iterate(today, date -> date.minus(1, ChronoUnit.DAYS))
      .limit(numDates)
      .collect(Collectors.toSet());

这在 Scala 中的等价物是什么?

LazyList companion object 定义了一个iterate方法,它允许您根据起点和步骤操作定义序列(注意: Iterator的同伴定义了类似的方法):

def iterate[A](start: => A)(f: (A) => A): LazyList[A]

事实上,它看起来与 Java 版本基本相同,只是startf arguments 出现在单独的参数列表中。 Pepper in Scala 的匿名函数语法糖(使用_表示 function 参数),你可以这样做

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)来迭代内容,而无需为集合分配 memory。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM