任何人都可以帮助我指出以下代码中使用asSequence()的区别。
val numbers = 1 .. 50
val output = numbers.filter{ it < 10 }.map{ Pair("Kotlin", it)}
output.forEach(::println)
Run Code Online (Sandbox Code Playgroud)
新增中 asSequence()
val numbers = 1 .. 50
val output = numbers.asSequence().filter{ it < 10 }.map{ Pair("Kotlin", it)}
output.forEach(::println)
Run Code Online (Sandbox Code Playgroud)
区别在于,当您使用a时Sequence,仅当您遍历元素时它才会运行函数。因此,例如:
val numbers = 1 .. 50
val output = numbers.asSequence().filter{
println("Filtering $it")
it < 10
}.map{
println("Mapping $it")
Pair("Kotlin", it)
}
Run Code Online (Sandbox Code Playgroud)
不会打印任何内容,因为您没有进行遍历output。
检查文档有帮助:
/**
* Creates a [Sequence] instance that wraps the original collection
* returning its elements when being iterated.
*/
public fun <T> Iterable<T>.asSequence(): Sequence<T> {
return Sequence { this.iterator() }
}
Run Code Online (Sandbox Code Playgroud)
使用Sequences很有用,因为如果仅调用mapa Collection,结果将转换为a,List而使用a Sequence则可以避免这些转换步骤。想想Sequence就像StreamS中的Java流API中(不同之处在于科特林的解决方案不支持并行执行)。
| 归档时间: |
|
| 查看次数: |
975 次 |
| 最近记录: |