Kotlin 序列是否缓存中间结果?
Do Kotlin Sequences cache intermediate results?
当使用 map
、flatMap
、+
等函数式 API 操作 Kotlin 序列时,会缓存计算的中间结果,因此在第二次评估时不会重新计算?
如果不是,用 Sequence
替换 List
在某些情况下可能会导致复杂性呈指数级增长,而 official docs 中使用的词 "lazy" 似乎不会足以区分这两种行为。
换句话说,与 Scala 相比,Kotlin Sequence
s 更像 Scala Stream
s/LazyList
s(其中 "Once computed, a value stays computed and is reused. Or, as you say, the values are cached.")还是 View
s(其中 "all transformations are re-applied each time you need to fetch elements from it")? (引用内容来自What is the difference between view, stream and iterator? | FAQ | Scala Documentation)
每次调用终端函数时,都会重新计算序列。但是可以用toList()
求值,一次求值完成,后续操作使用列表。
当使用 map
、flatMap
、+
等函数式 API 操作 Kotlin 序列时,会缓存计算的中间结果,因此在第二次评估时不会重新计算?
如果不是,用 Sequence
替换 List
在某些情况下可能会导致复杂性呈指数级增长,而 official docs 中使用的词 "lazy" 似乎不会足以区分这两种行为。
换句话说,与 Scala 相比,Kotlin Sequence
s 更像 Scala Stream
s/LazyList
s(其中 "Once computed, a value stays computed and is reused. Or, as you say, the values are cached.")还是 View
s(其中 "all transformations are re-applied each time you need to fetch elements from it")? (引用内容来自What is the difference between view, stream and iterator? | FAQ | Scala Documentation)
每次调用终端函数时,都会重新计算序列。但是可以用toList()
求值,一次求值完成,后续操作使用列表。