如何将三个Kotlin Flow合并为Triple类型的Flow?
Kotlin Flow 合并为 Flow 的实现方法
你用 merge 是找错了操作符——merge 的作用是把多个同类型 Flow 的元素按发射顺序合并成单个 Flow,会依次输出 A、B、C,但没法生成 Triple 对象。要把三个 Flow 的单个元素组合成 Triple,得用 combine 操作符。
实现代码
import kotlinx.coroutines.runBlocking import kotlinx.coroutines.flow.Flow import kotlinx.coroutines.flow.combine import kotlinx.coroutines.flow.flow fun main() = runBlocking { val flow1 = flow<String> { emit("A") } val flow2 = flow<String> { emit("B") } val flow3 = flow<String> { emit("C") } // 将三个Flow组合为Flow<Triple<String, String, String>> val combinedFlow = combine(flow1, flow2, flow3) { a, b, c -> Triple(a, b, c) } // 收集并输出结果 combinedFlow.collect { triple -> println("${triple.first} ${triple.second} ${triple.third}") } }
说明
combine会等待所有输入 Flow 至少发射一次值,然后用每个 Flow 的最新值执行 lambda 生成组合对象(这里就是Triple)。- 因为你的三个 Flow 都只发射一次值,所以最终只会生成一个
Triple("A", "B", "C"),收集时直接输出A B C。 - 如果后续 Flow 有多次发射,
combine会在任意一个 Flow 发射新值时,用所有 Flow 的最新值重新组合生成新的Triple。
内容的提问来源于stack exchange,提问作者WISHY
相关产品推荐
相关产品推荐

