[当使用具有map
,flatMap
,+
等功能API的Kotlin序列进行运算时,会计算中间结果缓存,因此在进行第二次评估时没有重新计算吗?
如果不是,在某些情况下用List
替换Sequence
可能会导致复杂性呈指数级增长,official docs中使用的“懒惰”一词似乎不够精确,无法区分这两种行为。
换句话说,与Scala相比,Kotlin Sequence
更像ScalaStream
s /LazyList
s(其中“一旦计算,值就保持计算并被重用。或者,正如您所说,这些值是缓存的。”或View
(其中“每次需要从中获取元素时都重新应用所有转换”)? (引用What is the difference between view, stream and iterator? | FAQ | Scala Documentation中的内容)
每当您在其上调用终端功能时,都会重新评估该序列。但是您可以使用toList()
进行评估,以一次完成评估,并将该列表用于后续操作。