Flow 组合:20. Zip 组合两个流

本篇解析 example-flow-20.kt。学习如何将两个独立的数据源进行配对组合。

1. 核心操作符:zip

zip 操作符用于将两个流中的对应元素组合成一个新的元素。

特点:

  • 一一对应:第一个流的第 N 个元素只会与第二个流的第 N 个元素配对。
  • 短板效应:如果其中一个流结束了,整个 zip 后的流也会立即结束。

2. 代码解析

1
2
3
4
val nums = (1..3).asFlow() // 1, 2, 3
val strs = flowOf("one", "two", "three") // "one", "two", "three"
nums.zip(strs) { a, b -> "$a -> $b" }
.collect { println(it) }
  • 输出
    1 -> one
    2 -> two
    3 -> three

3. 开发者感悟

zip 在处理“多源同步”时非常有用。例如:你需要同时请求用户的个人资料和订单列表,并把这两者合并成一个 UIModel。只有当两个请求都成功返回对应的结果时,zip 才会产出合并后的对象。

,