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等难道没有更好的方法吗?你可以先试试你的想法,看看什么对你有用。