我有一个布尔单选列表,我想通过以下方式转换为Maybe:
按顺序浏览列表中的每个发射,如果上游发射为假flatMapMaybe
到Maybe.never()
,但如果发射为真,则订阅列表中的下一个单一,直到列表为空
这是我到目前为止所做的:
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;
并且如果一个发射是假的则停止订阅列表订阅,也就是当最后一个只返回Maybe.just(true)
时。正在寻找
我不想订阅所有单曲的主要原因是上游布尔发射正在执行ui更改,如果一个是假的,则不想通过断开来触发其余的ui更改。
答案 0 :(得分:2)
也许使用 <?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android">
<item android:id="@+id/impclick"
android:title="Mark As Important"
/>
<item android:id="@+id/colorclick"
android:title="Mark with color" />
</menu>
(也许还有takeUntil
)来获得所需的模式。
lastElement()