0

我还是 RxAndroid 的新手,我想在流中加载单个对象。这个对象可以作为 Observable 从两个不同的类中加载。在我的场景中,首先从 加载对象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;
                });

还是我只是以完全错误的方式做事?任何帮助表示赞赏。

4

1 回答 1

2

您可以使用switchIfEmpty,例如

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

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

于 2015-06-09T01:53:21.160 回答