在 RxAndroid 的流中创建条件对象
Conditional object creation within a stream in RxAndroid
我还是 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;
});
还是我完全用错了方法?
任何帮助表示赞赏。
可以使用switchIfEmpty,比如
return provider1.getObject()
.filter(o -> o != null)
.switchIfEmpty(provider2.getObject());
顺便说一句,switchIfEmpty
是从 RxJava 1.0.5 开始添加的。您可能需要在构建脚本中指定 RxJava 版本。
我还是 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;
});
还是我完全用错了方法? 任何帮助表示赞赏。
可以使用switchIfEmpty,比如
return provider1.getObject()
.filter(o -> o != null)
.switchIfEmpty(provider2.getObject());
顺便说一句,switchIfEmpty
是从 RxJava 1.0.5 开始添加的。您可能需要在构建脚本中指定 RxJava 版本。