kotlin中的Sequences(序列)与Iterable(集合)区别
Posted *^O^*—*^O^*
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了kotlin中的Sequences(序列)与Iterable(集合)区别相关的知识,希望对你有一定的参考价值。
序列
我自己的理解,序列和集合差不多,提供与Iterable 相同的函数,但是实现另一种方法来进行多步骤聚合操作
注意
当 Iterable 的处理包含多个步骤时,它们会执行每个处理步骤完成并返回其结果(中间集合)。 在此集合上执行以下步骤。反过来,序列的多步处理在可能的情况下会延迟执行:仅当请求整个处理链的结果时才进行实际计算。
操作执行的顺序不同:Sequence 对每个元素逐个执行所有处理步骤。 反过来,Iterable 完成整个集合的每个步骤,然后进行下一步。
每次迭代Sequences(序列) 时,都会计算元素。Lists(集合) 中的元素只计算一次,然后存储在内存中。
示例
val words = "The quick brown fox jumps over the lazy dog".split(" ")
val lengthsList = words.filter println("filter: $it"); it.length > 3
.map println("length: $it.length"); it.length
.take(4)
println("Lengths of first 4 words longer than 3 chars:")
println(lengthsList)
println("++++++++++++++++++++++++++++++++++")
val words1 = "The quick brown fox jumps over the lazy dog".split(" ").asSequence()
val lengthsSequence = words1.filter
运行结果
序列可避免生成中间步骤的结果,从而提高了整个集合处理链的性能。
但是,序列的延迟性质增加了一些开销
因此,应该同时考虑使用 Sequence 与 Iterable,并确定在哪种情况更适合
以上是关于kotlin中的Sequences(序列)与Iterable(集合)区别的主要内容,如果未能解决你的问题,请参考以下文章
UVA 1608 Non-boring sequences (分冶+递归)