You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将三个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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.11 23:07:03