kotlin: flow:中间操作符的位置
一,代码:
//处理按钮点击事件
binding.button1.setOnClickListener {
runBlocking {
flow { // 上游,发源地
emit(1) // 挂起函数
emit(2)
emit(3)
emit(4)
emit(5)
}.filter {
println("filter: $it")
it > 2
} // 中转站1
.map { it * 2 } // 中转站2
.take(2) // 中转站3
.collect{ // 下游
println("collect: $it")
}
}
}
//处理按钮点击事件
binding.button2.setOnClickListener {
runBlocking {
flowOf(1, 2, 3, 4, 5)
.take(2) // 注意这里
.filter {
println("filter: $it")
it > 2
}
.map {
println("map: $it")
it * 2
}
.onStart { println("onStart") }
.collect {
println("collect: $it")
}
}
}
说明:
相比第一个按钮的点击, take(2) 的位置挪到了上游的起始位置,
因为1、2这两个数字都不满足filter的要求,
所以到collect这一步时就打印不出来数据了
二,运行结果:
第一个按钮点击
第二个按钮点击