RxJava: как кодировать что-то вроде doOnEmpty?

Я использую несколько фильтров на моем Observable и я хотел бы сообщить о случаях в конце фильтрации, когда результат был пустым. Я не могу сделать это в конце обработки, потому что эта наблюдаемая должна быть объединена с другой:

        Observable.just(1, 2, 3)
                .concatWith(
                        Observable.just(2, 4, 6)
                                .filter(value -> ((value % 2) != 0))
                                // report if empty
                )

2 ответа

Решение

Ты можешь использовать Transformers.doOnEmpty из rxjava-extras, который находится в Maven Central:

source.compose(Transformers.doOnEmpty(action))

Вы можете использовать это решение, если вы заботитесь об эффективности (распределение / производительность), но в противном случае используете решение @dwursteisen.

Ты можешь использовать 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();
Другие вопросы по тегам