Flow 数据流
Flow 冷流、flow { emit }、操作符、StateFlow/SharedFlow
Flow 数据流
Flow 是协程世界的冷数据流——类似 RxJava 但更轻量,原生支持背压。
学完本章你将: 掌握 Flow 创建、操作符、StateFlow/SharedFlow。
创建 Flow
kotlin
fun numbers(): Flow<Int> = flow {
for (i in 1..5) {
delay(100) // 模拟异步
emit(i) // 发射值
}
}
fun main() = runBlocking {
numbers()
.collect { value -> println(value) } // 收集值
}
操作符
kotlin
numbers()
.map { it * 2 } // 变换
.filter { it > 3 } // 过滤
.take(3) // 限制数量
.onEach { println("发射: $it") }
.collect { println("收集: $it") }
StateFlow(热流)
kotlin
val _state = MutableStateFlow(0) // 有初始值
val state: StateFlow<Int> = _state
// 读取
state.value // 同步读取当前值
// 收集
state.collect { value -> println(value) }
SharedFlow(热流)
kotlin
val _events = MutableSharedFlow<String>() // 无初始值
val events: SharedFlow<String> = _events
// 发射——不等待收集者
_events.emit("事件1")
// 可配置重放/缓冲区
MutableSharedFlow<String>(replay = 1) // 新订阅者收到最后一个值