【问题标题】:RxJava: how to code something like doOnEmpty?RxJava:如何编写类似 doOnEmpty 的代码?
【发布时间】:2016-12-07 21:36:02
【问题描述】:
我在 Observable 上使用了多个过滤器,我想在过滤结束时报告结果为空的情况。我不能在处理结束时这样做,因为这个 observable 应该与另一个连接:
Observable.just(1, 2, 3)
.concatWith(
Observable.just(2, 4, 6)
.filter(value -> ((value % 2) != 0))
// report if empty
)
【问题讨论】:
标签:
java
rx-java
reactive-programming
observable
【解决方案1】:
您可以使用switchIfEmpty 并使用此备用Observable 做一些事情
Observable.just(2, 4, 6)
.filter(value -> ((value % 2) != 0))
// replace the empty observable with an empty observable
// but this observable will log when it will completed
.switchIfEmpty(Observable.<Integer>empty().doOnTerminate(() -> System.out.println("empty !")))
.subscribe();
【解决方案2】:
您可以使用 Maven Central 上的 rxjava-extras 中的 Transformers.doOnEmpty:
source.compose(Transformers.doOnEmpty(action))
如果您关心效率(分配/性能),则可以使用此解决方案,否则请使用 @dwursteisen 的解决方案。