RxJava Single:flatMap如果为false

时间:2017-09-18 00:42:46

标签: android rx-java observable

我有一个布尔单选列表,我想通过以下方式转换为Maybe:

按顺序浏览列表中的每个发射,如果上游发射为假flatMapMaybeMaybe.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更改。

1 个答案:

答案 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()