我有多个Observable<Boolean>
从“警报传感器”传递数据。他们只提供价值变化。如何等待所有的人都切换到false
,这表明不再有警报了?
在该情况下,将Observable.combineLatest()
与Observable.combineLatest()
结合使用:
Observable.filter()
@@ 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代码