Rx java 在反应式编程中,如何将if-else语句合并到一个返回中?
我有一段代码:Rx java 在反应式编程中,如何将if-else语句合并到一个返回中?,rx-java,rx-java2,Rx Java,Rx Java2,我有一段代码: .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)
.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()
您可以使用filter和defaultIfEmpty
Observable.just("one", "two")
.filter(s -> !s.equals("a"))
.map(s -> s + "!")
.defaultIfEmpty(load());
但是我不建议您调用defaultIfMethod()中的任何方法,因为
将调用方法load(),这不取决于筛选器()的结果
这就是为什么你可以使用
.switchIfEmpty(可观察的.fromCallable(()->load()))
swithIfEmpty将像懒惰的风格一样工作,但是
defaultIfEmpty在一些对象中具有参数,等等
它的工作方式类似于渴望的风格您可以使用filter和defaultIfEmpty
Observable.just("one", "two")
.filter(s -> !s.equals("a"))
.map(s -> s + "!")
.defaultIfEmpty(load());
但是我不建议您调用defaultIfMethod()中的任何方法,因为
将调用方法load(),这不取决于筛选器()的结果
这就是为什么你可以使用
.switchIfEmpty(可观察的.fromCallable(()->load()))
swithIfEmpty将像懒惰的风格一样工作,但是
defaultIfEmpty在一些对象中具有参数,等等
它的工作方式类似于渴望的风格使用三元(
?:
)也许:返回(obj.someField==null)?loadInfo(obj.id).map(info->Entry(1,2,info)):Single.just(Entry(1,2,null))代码>嗯,在loadInfo之前有一段代码,所以我必须使用这样的三元运算符:返回条件?getSingleMethod():Single.just()使用defaultIfEmpty等难道没有更好的方法吗?你可以先试试你的想法,看看什么对你有用。使用三元(?:
)也许:返回(obj.someField==null)?loadInfo(obj.id).map(info->Entry(1,2,info)):Single.just(Entry(1,2,null))代码>嗯,在loadInfo之前有一段代码,所以我必须使用这样的三元运算符:返回条件?getSingleMethod():Single.just()使用defaultIfEmpty等难道没有更好的方法吗?你可以先试试你的想法,看看什么对你有用。