Flow 基础:08. Map 与 Filter 操作符

本篇解析 example-flow-08.kt。探讨 Flow 中最基础的转换操作符.

1. 核心概念

Flow 的操作符命名与 ListSequence 非常相似,例如 map(转换)和 filter(过滤)。

关键区别:

  • 支持挂起:Flow 操作符内部的代码块可以调用挂起函数

2. 代码解析

1
2
3
4
5
6
7
8
9
10
suspend fun performRequest(request: Int): String {
delay(1000) // 模拟一个 1 秒钟的网络请求
return "response $request"
}

fun main() = runBlocking {
(1..3).asFlow()
.map { request -> performRequest(request) } // 这里的 map 内部调用了挂起函数
.collect { response -> println(response) }
}
  • 串行执行:默认情况下,每个 map 转换都会等待前一个转换完成。在这个例子中,每隔 1 秒产出一个结果,总共耗时约 3 秒。

3. 开发者感悟

Flow 最大的魅力就在于此:它让你能用写同步集合代码的方式(一个 map 搞定),去处理原本非常复杂的异步回调逻辑。

,