Kotlin 序列是否缓存中间结果?

Do Kotlin Sequences cache intermediate results?

当使用 mapflatMap+ 等函数式 API 操作 Kotlin 序列时,会缓存计算的中间结果,因此在第二次评估时不会重新计算?

如果不是,用 Sequence 替换 List 在某些情况下可能会导致复杂性呈指数级增长,而 official docs 中使用的词 "lazy" 似乎不会足以区分这两种行为。

换句话说,与 Scala 相比,Kotlin Sequences 更像 Scala Streams/LazyLists(其中 "Once computed, a value stays computed and is reused. Or, as you say, the values are cached.")还是 Views(其中 "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()求值,一次求值完成,后续操作使用列表。