RxAndroid -在流中创建条件对象



我仍然是RxAndroid的新手,我想在流中加载一个对象。这个对象可以作为可观察对象从两个不同的类中加载。在我的场景中,对象首先从provider1加载,但是如果提供了null,则对象将从provider2加载。

我的问题是

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

现在我的代码看起来像这样

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

这看起来不太好,可能我遗漏了一个运算符吗?或者至少有一种方法来平面化单个可观察对象,这样我就可以这样做:

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

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

相关内容

  • 没有找到相关文章

最新更新