RxJava:如何编写类似 doOnEmpty 的代码?
RxJava: how to code something like doOnEmpty?
我在 Observable
上使用了多个过滤器,我想在过滤结束时报告结果为空的案例。我不能在处理结束时这样做,因为这个 observable 应该与另一个 observable 连接:
Observable.just(1, 2, 3)
.concatWith(
Observable.just(2, 4, 6)
.filter(value -> ((value % 2) != 0))
// report if empty
)
您可以使用 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();
您可以使用 Maven Central 上 rxjava-extras 中的 Transformers.doOnEmpty
:
source.compose(Transformers.doOnEmpty(action))
如果您关心效率 (allocations/performance),则可以使用此解决方案,否则请使用 @dwursteisen 的解决方案。
我在 Observable
上使用了多个过滤器,我想在过滤结束时报告结果为空的案例。我不能在处理结束时这样做,因为这个 observable 应该与另一个 observable 连接:
Observable.just(1, 2, 3)
.concatWith(
Observable.just(2, 4, 6)
.filter(value -> ((value % 2) != 0))
// report if empty
)
您可以使用 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();
您可以使用 Maven Central 上 rxjava-extras 中的 Transformers.doOnEmpty
:
source.compose(Transformers.doOnEmpty(action))
如果您关心效率 (allocations/performance),则可以使用此解决方案,否则请使用 @dwursteisen 的解决方案。