Flow 组合:23. FlatMapConcat 顺序平坦化

本篇解析 example-flow-23.kt。学习如何处理“流中流”的嵌套情况。

1. 核心操作符:flatMapConcat

当你有一个初始流,且它的每个元素都会触发另一个流(子流)时,你会得到一个 Flow<Flow<T>>flatMapConcat 的作用就是将这些子流按顺序连接并铺平。

特点:

  • 顺序执行:它会等待第一个子流完全发射完毕后,才开始处理第二个子流。
  • 等价于map { requestFlow(it) }.flattenConcat()

2. 代码解析

1
2
3
(1..3).asFlow()
.flatMapConcat { requestFlow(it) } // 请求 1 结束后才开始请求 2
.collect { println(it) }
  • 结果分析
    1. 1: First (100ms) -> 1: Second (600ms)。
    2. 2: First (700ms) -> 2: Second (1200ms)。
    3. … 严格保证了 1, 2, 3 的顺序。

3. 开发者感悟

flatMapConcat 就像是串行的网络请求。例如:你需要先通过用户名查到用户 ID(子流 1),拿到 ID 后再去查用户的详细信息(子流 2)。它保证了任务的逻辑顺序。

,