kotlin:sequence在有take时会提前终止处理
一,sequence有take时
代码:
//处理按钮点击事件
binding.button3.setOnClickListener {
val list1 = (1..1000)
.asSequence()
.filter {
println("filter: ${it}")
it % 2 == 0
}
.map {
println("map: ${it}")
it * 2
}
.take(3) // 只处理到找到 3 个元素为止
.toList()
println("最终结果:"+list1)
}
运行结果:
二,list有take时
代码:
//处理按钮点击事件
binding.button4.setOnClickListener {
val list1 = (1..1000)
.filter { // 执行1000次,找到500个偶数
println("filter: ${it}")
it % 2 == 0
}
.map { // 执行500次,各剩以2
println("map: ${it}")
it * 2
}
.take(3) // 取前3个
.toList()
println("最终结果:"+list1)
}
运行结果: filter和map中代码分别执行了1000次和500次
三,总结:
当使用 take(n)
、first()
等操作时,Sequence
会在满足条件后立即终止处理,避免不必要的计算
普通集合会先处理全部的 100 万元素,而 Sequence
可能仅处理到第 6 个元素(找到 3 个偶数后停止)