在 RxAndroid 的流中创建条件对象

Conditional object creation within a stream in RxAndroid

我还是 RxAndroid 的新手,我想在流中加载单个对象。这个对象可以从两个不同的 类 作为 Observable 加载。在我的 szenario 中,首先从 provider1 加载对象,但是如果提供 null,则将从 provider2.

加载对象

我的问题是

目前我的代码看起来像这样

return provider1.getObject()
                .flatMap(o -> {
                    if(o == null) return provider2.getObject();
                    else return Observable.just(o);
                });

这看起来不太好,是否有我缺少的运算符?或者至少有一种方法可以展平单个 Observable,这样我就可以做类似的事情:

return provider1.getObject()
                .map(o -> {
                    if(o == null) return provider2.getObject().flatten();
                    else return o;
                });

还是我完全用错了方法? 任何帮助表示赞赏。

可以使用switchIfEmpty,比如

return provider1.getObject()
           .filter(o -> o != null)
           .switchIfEmpty(provider2.getObject());

顺便说一句,switchIfEmpty 是从 RxJava 1.0.5 开始添加的。您可能需要在构建脚本中指定 RxJava 版本。