本篇解析 example-flow-23.kt。学习如何处理“流中流”的嵌套情况。
1. 核心操作符:flatMapConcat
当你有一个初始流,且它的每个元素都会触发另一个流(子流)时,你会得到一个 Flow<Flow<T>>。flatMapConcat 的作用就是将这些子流按顺序连接并铺平。
特点:
- 顺序执行:它会等待第一个子流完全发射完毕后,才开始处理第二个子流。
- 等价于:
map { requestFlow(it) }.flattenConcat()。
2. 代码解析
1 | (1..3).asFlow() |
- 结果分析:
- 1: First (100ms) -> 1: Second (600ms)。
- 2: First (700ms) -> 2: Second (1200ms)。
- … 严格保证了 1, 2, 3 的顺序。
3. 开发者感悟
flatMapConcat 就像是串行的网络请求。例如:你需要先通过用户名查到用户 ID(子流 1),拿到 ID 后再去查用户的详细信息(子流 2)。它保证了任务的逻辑顺序。