RxAndroid中的流中的条件对象创建

时间:2015-06-08 20:30:56

标签: rx-java rx-android

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

我的问题是

  • 我不知道如何优雅地检查null
  • 我不知道如何在同一方法中同时处理Observable<MyObj>MyObj

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

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;
                });

或者我只是以完全错误的方式做到这一点? 任何帮助表示赞赏。

1 个答案:

答案 0 :(得分:2)

您可以使用switchIfEmpty,例如

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

BTW,自RxJava 1.0.5起添加switchIfEmpty。您可能需要在构建脚本中指定RxJava版本。