RxJava,等待多个Observable在同一时间提供所需的结果

问题描述 投票:0回答:2

我有多个Observable<Boolean>从“警报传感器”传递数据。他们只提供价值变化。如何等待所有的人都切换到false,这表明不再有警报了?

java rx-java reactive-programming rx-java2 rx-java3
2个回答
2
投票

在该情况下,将Observable.combineLatest()Observable.combineLatest()结合使用:

Observable.filter()

0
投票

@@ ConstOrVar的回答对我有很大帮助,但实际上我必须在其中添加一个元素。因为我的Observable.filter()仅在实际值更改时才提供新状态,所以我必须确保在Observale<Boolean> source1 = TODO(); Observale<Boolean> source2 = TODO(); Observale<Boolean> source3 = TODO(); Observable .combineLatest(source1, source2, source3, (value1. value2, value3) -> { return value1 || value2 || value3; }) .filter(combinedValue -> combinedValue == false) .subscribe(TODO()) ()中有一些参考初始状态可用于操作:

Observables

注意:这是[combineLatest使用 val oneTruth = Observable.just(true) Observables .combineLatest( oneTruth.concatWith(events.cliffLeft), oneTruth.concatWith(events.cliffFrontLeft), oneTruth.concatWith(events.cliffFrontRight), oneTruth.concatWith(events.cliffRight), oneTruth.concatWith(events.wheelDropLeft), oneTruth.concatWith(events.wheelDropRight) ) { v0, v1, v2, v3, v4, v5 -> (v0 || v1 || v2 || v3 || v4 || v5) } .filter { danger -> !danger } .filter { state.oiMode == OiMode.PASSIVE } .subscribe { logger.debug { "Bringing Roomba back to safe mode" } roomba.safeMode() } 语法糖的Kotlin代码

© www.soinside.com 2019 - 2024. All rights reserved.