将两个Kotlin流合并为一个流,从而从两个原始流中发出最新的值? [英] Combine two kotlin flows into a single flow that emits the latest value from the two original flows?

查看:21
本文介绍了将两个Kotlin流合并为一个流,从而从两个原始流中发出最新的值?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

如果我们有两个这样定义的流:

val someflow = flow {
    emit("something")
}

和另一个定义如下的流:

val stateFlow = MutableStateFlow("some value")

是否可以将这两个流合并为仅发出someflowstateFlow发出的最后一个值的单个流?

的想法是stateFlow可能在将来的某个时候发出一个值,但在此之前,我只想要someflow最后发出的任何值。在组合流中,我希望只获取someflow发出的第一个值,然后能够观察stateFlow上的其余更新。

这似乎可以使用Combine函数来完成,但我只想在两个流之间发出最新发出的值,我不在乎一个流的最后一个值是什么。

推荐答案

有一个flattenMerge函数,它将流作为单个流执行,这可能是您需要的。例如:

val numbersFlow = flowOf("1", "2", "3", "4").onEach { delay(1000) }
val lettersFlow = flowOf("A", "B", "C").onEach { delay(2000) }
flowOf(numbersFlow, lettersFlow).flattenMerge().collect {
    println("Result $it")
}

打印:

Result 1
Result A
Result 2
Result 3
Result B
Result 4
Result C

因此,对于您的案例,它将如下所示:

flowOf(someFlow, stateFlow).flattenMerge().collect {
    println("Result $it")
}

这篇关于将两个Kotlin流合并为一个流,从而从两个原始流中发出最新的值?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆