【问题标题】:How to concatenate two kotlin flows?如何连接两个科特林流程?
【发布时间】:2022-11-19 20:32:22
【问题描述】:

如前所述,我想按顺序连接两个流,因此 merge 将不起作用。

例子:

val f1 = flowOf(1, 2)
val f2 = flowOf(3, 4)
val f = concatenate(f1, f2) // emits 1, 2, 3, 4

【问题讨论】:

  • 如果有两个流定义如下:val f1 = flowOf(1, 2, 3 ,4) val f2 = flowOf(5, 6),是否要将它们合并并得到结果1, 2, 3, 4, 5, 6
  • 是的,顺序连接。

标签: kotlin kotlin-coroutines kotlin-flow


【解决方案1】:

您可以为此使用flattenConcat

fun <T> concatenate(vararg flows: Flow<T>) =
    flows.asFlow().flattenConcat()

flow 建设者:

fun <T> concatenate(vararg flows: Flow<T>) = flow {
    for (flow in flows) {
        emitAll(flow)
    }
}

【讨论】:

    【解决方案2】:

    这应该有效:onCompletion

    val f1 = flowOf(1,2,3)
    val f2 = flowOf(4,5,6)
    val f = f1.onCompletion{emitAll(f2)}
    runBlocking {
       f.collect {
            println(it)
       }
    }
    
    //Result: 1 2 3 4 5 6
    

    【讨论】:

      猜你喜欢
      • 2021-12-28
      • 2021-05-11
      • 1970-01-01
      • 2021-11-03
      • 1970-01-01
      • 1970-01-01
      • 2021-05-09
      • 1970-01-01
      • 2021-11-28
      相关资源
      最近更新 更多