我有一段以下代码:
.flatMap(sth -> {
obj = sth.getSomeLast();
if (obj.someField == null) {
return dao.loadInfo(obj.id).map(info -> Entry(1, 2, info));
} else {
return Single.just(Entry(1, 2, null));
}
})
.doOnNext(entry -> writer(entry));
如何避免使用2返回(在if / else中)?我在想.filter
然后defaultIfEmpty()
答案 0 :(得分:1)
您可以使用filter和defaultIfEmpty
Observable.just("one", "two")
.filter(s -> !s.equals("a"))
.map(s -> s + "!")
.defaultIfEmpty(load());
但是我建议你不要在defaultIfMethod()中调用任何方法,因为 方法load()将被调用,而不是取决于filter()
的结果这就是你可以使用
的原因 .switchIfEmpty(Observable.fromCallable(() -> load()))
swithIfEmpty会像懒惰的风格一样工作,但是 defaultIfEmpty在参数中有一些对象等等 它会像热切的风格一样工作