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();