本篇解析 example-flow-12.kt。理解 Flow 的执行顺序。
1. 核心概念
Flow 的收集是连续执行执行的。
连续性的含义:
- 默认情况下,对于流中的每一个元素,它都会按顺序通过所有的操作符(
filter,map等),最后到达collect。 - 只有当这一个元素被处理完后,流才会开始发射下一个元素。
2. 代码解析
1 | (1..5).asFlow() |
- 执行逻辑:
- 发射 1 ->
filter不通过。 - 发射 2 ->
filter通过 ->map转换 ->collect打印。 - 重复以上过程直到 5。
- 发射 1 ->
- 注意:它不是先过滤出所有偶数,再批量转换。而是一个个处理。
3. 开发者感悟
这种连续性保证了逻辑的简单和预测性。你可以把它想象成工厂的流水线:一个零件走完所有工序后,下一个零件才上场。这种模式非常节省内存,因为同一时间只有一个数据在管道中流动。