Flow 基础:09. Transform 通用转换操作符

本篇解析 example-flow-09.kt。学习 Flow 中最灵活的转换工具:transform

1. 核心概念

transform 操作符是 mapfilter 的超集。它允许你:

  1. 多次发射:在处理一个输入值时,可以调用多次 emit
  2. 条件发射:模拟 filter 的逻辑。
  3. 异步发射:内部可随意调用挂起函数。

2. 代码解析

1
2
3
4
5
6
(1..3).asFlow()
.transform { request ->
emit("Making request $request") // 第一次发射:日志信息
emit(performRequest(request)) // 第二次发射:真实响应
}
.collect { println(it) }
  • 灵活性:在这个例子中,每个请求都对应了两条产出。这种“一变多”的逻辑是 map 无法实现的(map 只能一变一)。

3. 开发者感悟

在处理复杂的 API 转换时,transform 非常好用。比如在请求之前先发射一个“加载中”状态,请求完再发射结果。它比 map 更强大,能让你更精细地控制数据流的输出。

,