Z
ZHANK

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)     // 新订阅者收到最后一个值