Cit*_*tut 7 coroutine kotlin kotlin-coroutines kotlin-flow kotlin-stateflow
如果我们有两个这样定义的流:
val someflow = flow {
emit("something")
}
Run Code Online (Sandbox Code Playgroud)
另一个流程定义如下:
val stateFlow = MutableStateFlow("some value")
Run Code Online (Sandbox Code Playgroud)
是否可以将两个流组合成一个流,该流仅发出someflowor发出的最后一个值stateFlow?
这个想法是,stateFlow可能会在未来的某个时刻发出一个值,但在那之前我只想要someflow最后发出的任何值。在“组合”流程中,我想只获取 发出的第一个值someflow,但随后能够观察 上的其余更新stateFlow。
看起来这可以通过组合函数来完成,但我只想发出两个流之间的最新发出值,我不关心一个流的最后一个值是什么。
Ser*_*gey 10
有一个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")
}
Run Code Online (Sandbox Code Playgroud)
印刷:
Result 1
Result A
Result 2
Result 3
Result B
Result 4
Result C
Run Code Online (Sandbox Code Playgroud)
所以对于你的情况,它看起来像:
flowOf(someFlow, stateFlow).flattenMerge().collect {
println("Result $it")
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
8271 次 |
| 最近记录: |