星星瑶*_*星星瑶 6 android kotlin kotlin-flow
有两个流:FlowA 和 FlowB。
我想将它们组合起来,仅当 FlowA 发出元素时才从 FlowA 获取最新元素,并从 FlowB 获取最新元素。这就像组合 FlowA 和 FlowB,但仅当 FlowA 发出元素时才会触发组合流。
如果flowA不包含重复元素,或者如果您可以对 A 的重复元素“不触发”,则可以使用zip和distinctUntilChangedBy实现您想要的效果,如下所示:
val flowA = flowOf("a", "b", "c")
val flowB = flowOf(1, 2, 3)
val resultFlow = flowA.zip(flowB)
.distinctUntilChangedBy { (a, _) -> a }
.map { (a, b) -> TODO("combine a and b") }
Run Code Online (Sandbox Code Playgroud)
另一种选择是StateFlow从 B 中创建一个并在需要时访问最新值(但它需要一个范围来收集状态中的 B,因此它使此代码半热):
val flowA = flowOf("a", "b", "c")
val flowB = flowOf(1, 2, 3)
val stateB = flowB.stateIn(someScope)
val resultFlow = flowA.map { a ->
val b = stateB.value
TODO("combine a and b")
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
6150 次 |
| 最近记录: |