https://discuss.kotlinlang.org/t/why-sequence-instead-of-iterator/1845/8
Iterator 是一个有状态的对象,因为它只保存当前遍历的信息。只能被遍历一次,没有措施阻止你对一个 iterator 进行多次操作,不容易发现代码中隐藏的错误。
sequence 是无状态的,你每进行一次遍历都会创建一个新的 iterator。如果一个 sequence 不支持重复遍历(比如一个 iterator 封装成的 sequence),进行第二次遍历时你就拿不到 iterator 了。
sequence 比 iterator 更好,因为他的定义更清晰。推荐使用 Java8 的 Stream API 也是基于相同的理由。
sequence 的定义
https://kotlinlang.org/api/latest/jvm/stdlib/kotlin.sequences/index.html
sequence 的操作符按照 state requirements 可分为两组:
stateless: 无需外部状态,每个元素都是独立的,比如 kotlin.sequences.Sequence.map ,
kotlin.sequences.Sequence.filter 或者需要一些常量做参数的 kotlin.sequences.Sequence.take,kotlin.sequences.Sequence.drop。stateful: 需要辅助状态,通常与 sequence 中元素数量有关
如果 sequence 操作符返回了一个 lazy 生成的 sequence,这种操作符被称为 intermediate,其他的被称为 terminal,比如 kotlin.sequences.Sequence.toList, kotlin.sequences.Sequence.max。