我遇到了以下要求:
我有一个返回Maybe
的方法,我需要对其进行处理,如果它返回某些东西,则调用另一个返回Single
的方法,否则在OnComplete
上调用{ {1}}。
这是一个代码段:
Single
有什么想法可以摆脱嵌套的 doSomethingThatReturnsMaybe()
.flatMapSingleElement(obj-> {
return doSomethingThatReturnsSingle();
})
.subscribe(obj -> LOG.info(obj),
err -> LOG.err("", err),
() -> {
doSomethingThatReturnsSingle()
.subscribe();
});
吗?
更新: 最新的代码段
subscribe
答案 0 :(得分:1)
在对评论进行讨论之后,我觉得这可能是一个解决方案。
我会在这里使用switchIfEmpty。
类似的东西:
doSomethingThatReturnsMaybe()
.flatMapSingleElement(obj-> {
return doSomethingThatReturnsSingle();
})
.switchIfEmpty(doSomethingThatReturnsSingle())
.subscribe(obj -> LOG.info(obj),
err -> LOG.err("", err);
如果switchIfEmpty
返回空,将执行 Maybe
。请注意,这与您所拥有的有所不同。您执行过两次doSomethingThatReturnsSingle()
。这个新示例执行一次。如果may返回空,则switchIfEmpty
将运行一次,否则,它将在flatMapSingleElement
上运行。流运行完成之前,它还没有运行。
答案 1 :(得分:0)
如果我正确理解它,那么在两种情况下(无论是否为空),您都希望致电doSomethingThatReturnsSingle()
。如果是这样,下面的代码可能会有所帮助,
doSomethingThatReturnsMaybe().isEmpty()
.flatMap(isEmpty-> doSomethingThatReturnsSingle())
.subscribe(obj-> System.out.println(obj));