kotlin 序列
当将流添加到Java 8时,我想加入潮流。 我阅读了博客文章,观看了视频,参加了研讨会,以了解所有内容。 过了一会儿,我变得足够自在...但是我对实现感到不满意:虽然流提供了具有功能性方法的方法,但是传统集合却没有。
如果要在现有集合上使用Java功能,则需要将后者转换为流,然后再次返回。 例如,以下代码通过流传输步骤从集合中筛选出一些元素:
List<String>names=Arrays.asList("Joe","Jack","William","Averell");
List<String>jNames=names.stream()
.filter(name->name.startsWith("J"))
.collect(Collectors.toList());
另一方面,Kotlin集合本身提供功能:
valnames=listOf("Joe","Jack","William","Averell")
valjNames=names.filter{it.startsWith("J")}
这就是我认为这是一种更好的方法的原因(请注意此处的过去时)。 但是,有一个很大的收获: Kotlin函数函数不是延迟计算的 ,而Java stream函数是! 如果该集合仅包含几个元素,这是完全可以的,但是如果有很多元素-或处理管道中有很多步骤,则可能是一个大问题。
但是,Kotlin还提供了一个延迟评估的对象: Stream
对应项是Sequence
:
![类图](https://i-blog.csdnimg.cn/blog_migrate/192f45765c4073654d4d840b224f601c.png)
集合和序列之间的通用功能尽管它们共享相同的功能,但Kotlin集合和Sequence之间没有共享的接口。 它们的功能通过类似宏的脚本生成(有关更多详细信息,请参见GenerateStandardLib)。 例如,序列函数在生成的kotlin.sequences._Sequences.kt文件中定义为扩展名。
结论
如果一个集合包含多个元素或绑定了多个元素,则序列应优先于集合。 否则,使用标准集合就可以了,因为它们具有相同的功能。
kotlin 序列