如何在反应式编程的一个回复中组合if-else语句?

时间:2018-01-25 15:18:53

标签: 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));

如何避免使用2返回(在if / else中)?我在想.filter然后defaultIfEmpty()

1 个答案:

答案 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在参数中有一些对象等等 它会像热切的风格一样工作