Flow 基础:12. 流的连续性 (Flows are Sequential)

本篇解析 example-flow-12.kt。理解 Flow 的执行顺序。

1. 核心概念

Flow 的收集是连续执行执行的。

连续性的含义:

  • 默认情况下,对于流中的每一个元素,它都会按顺序通过所有的操作符(filter, map 等),最后到达 collect
  • 只有当这一个元素被处理完后,流才会开始发射下一个元素。

2. 代码解析

1
2
3
4
5
6
7
8
9
10
11
(1..5).asFlow()
.filter {
println("Filter $it")
it % 2 == 0
}
.map {
println("Map $it")
"string $it"
}.collect {
println("Collect $it")
}
  • 执行逻辑
    1. 发射 1 -> filter 不通过。
    2. 发射 2 -> filter 通过 -> map 转换 -> collect 打印。
    3. 重复以上过程直到 5。
  • 注意:它不是先过滤出所有偶数,再批量转换。而是一个个处理

3. 开发者感悟

这种连续性保证了逻辑的简单和预测性。你可以把它想象成工厂的流水线:一个零件走完所有工序后,下一个零件才上场。这种模式非常节省内存,因为同一时间只有一个数据在管道中流动。

,