Kotlin中的Iterable与Sequence有什么不同吗?

Iterable与Sequence的用法几乎一样,比如都有说filtermapforEachsum等操作符。

1sequenceOf(1, 2, 3).map {
2    it * 2
3}.forEach {
4    println("$it")
5}
6
7listOf(1, 2, 3).map {
8    it * 2
9}.forEach {
10    println("$it")
11}

那为什么要有两个一样的接口呢?它们有什么区别吗?

kotliniterablesequence
1
318
小课
小课2022-05-18 19:09
1 个回答

虽然Iterable与Sequence接口非常相似,但是它们内部实现却完全不同,它们是为不同的应用场景设计的。

执行时机不同

Iterable当调用操作符会立即执行操作符内部的代码,并且返回执行操作符后的结果,而Sequence只有有执行到某些操作符(比如firsttoListcount)才会真正执行操作符内部的逻辑,像这些操作符(比如mapfilter)调用完成之后只会缓存操作符,并不会真正执行操作符内部的代码。

执行的顺序不同

Iterable在调用操作符后会直接执行逻辑,得到最终结果再执行下一个操作符,而Sequence会逐个元素执行所有操作符,比如说第一个元素执行完成所有操作符之后,第二个元素才从第一个操作符开始执行,直到所有操作符执行完毕。

Iterable与Sequence更详细的区别可以参考Iterable(Collection)与Sequence的区别

1
小课
小课2022-05-18 19:19
你的回答

内容