import kotlinx.coroutines.flow.Flow
import kotlinx.coroutines.flow.flow
import kotlinx.coroutines.flow.filter
import kotlinx.coroutines.flow.map
import kotlinx.coroutines.flow.toList
fun getProcessedNumbers(): Flow<Int> {
// 模拟生成一系列整数的Flow
return flow {
for (i in 1..10) {
emit(i)
}
}
// 过滤掉偶数
.filter { it % 2 != 0 }
// 将剩余的奇数平方
.map { it * it }
}
fun main() = runBlocking {
val result = getProcessedNumbers().toList()
println(result)
}
操作符组合意义解释:
flow
:构建一个 Flow
,这里通过 for
循环发射从 1 到 10 的整数。
filter
:过滤掉偶数,只保留奇数。filter
操作符会遍历 Flow
发射的每一个元素,根据传入的条件判断是否保留该元素。
map
:对过滤后剩下的奇数进行平方操作。map
操作符会对 Flow
发射的每一个元素应用传入的变换函数,将其转换为新的元素。
toList
:将 Flow
中的所有元素收集到一个 List
中,方便查看最终结果。在 main
函数中通过 runBlocking
协程构建器来执行这个收集操作。