android - RxJava单: flatMap if false

标签 android rx-java observable

我有一个 bool 单打列表,我想通过以下方式将其转换为 Maybe:

按顺序遍历列表中的每个发射,如果上游发射为 false flatMapMaybeMaybe.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/

相关文章:

android - 如何从 Android 上的 SQLite 数据库中检索数据?

android - 使用 Gradle 2.2.1 和 Android Studio 1.2.2 构建项目

android - 替换选项卡内容

events - 如何弱订阅事件/可观察量

javascript - 使用 RxJS 链接 promise

android - Android 中的谷歌地图 : Failed to find style 'mapViewStyle' in current theme

java - 使用 Roboguice 和 RxJava 进行继承和依赖注入(inject)

mvvm - RxJava - 主题中的错误处理

android - RxJava : auto unsubscribe in Android MVP

c# - Observable.Interval 等待 Action 完成