我有一个 bool 单打列表,我想通过以下方式将其转换为 Maybe:
按顺序遍历列表中的每个发射,如果上游发射为 false flatMapMaybe
到 Maybe.never()
但如果发射为 true 则订阅next 在列表中单选,直到列表为空。
这是我到目前为止所拥有的:
private void subscribeIfAllTrue(List<Single<Boolean>> singles) {
if (singles.isEmpty()) {
return;
}
Single.concat(blockingSingles)
.flatMapMaybe(
(Function<Boolean, MaybeSource<Boolean>>) shouldProgress -> {
if (shouldProgress) {
// flatMap to next single in list.
// if last in list then Maybe.just(true)
} else {
Maybe.never();
// break from list
}
}
}
这显然不起作用,因为我们通过 concat 订阅所有单曲,但这不是我想要的行为。想知道是否有一个 rx 运算符基本上 break;
并在一次发射为 false 时停止从订阅列表中订阅,并且当最后一个发射时仅返回 Maybe.just(true)
。正在寻找
我不想订阅所有单曲的主要原因是上游 bool 发射正在执行 ui 更改,如果其中一个为 false,则不想通过中断来触发其余部分的 ui 更改。
最佳答案
也许使用 takeUntil
(也许,lastElement()
)来获得所需的模式。
Mayble<Boolean> m = Single.concat(blockingSingles)
.takeUntil(bool -> !bool)
.lastElement()
关于android - RxJava单: flatMap if false,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46270136/