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(集合)区别的主要内容,如果未能解决你的问题,请参考以下文章

Kotlin系列之序列(Sequences)源码完全解析

UVA 1608 Non-boring sequences (分冶+递归)

187 Repeated DNA Sequences 重复的DNA序列

Sequences | lazy

Sequences | lazy

CANoe仿真功能之自动化序列(Automation Sequences )