RxJava,等待多个可观察量同时提供所需的结果



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

Observable.combineLatest()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())

@ConstOrVar的回答对我帮助很大,但实际上我必须添加一个元素。因为我的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()
}

注意:这是使用rxkotlin语法糖进行combineLatest的 Kotlin 代码

相关内容

  • 没有找到相关文章

最新更新