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 的解决方案。