RxJava: отличие между doOnNext и doOnEach
Описание проблемы
В каких случаях следует использовать doOnNext, а в каких — doOnEach?
Я столкнулся с данным вопросом при работе с библиотекой RxJava. Изучая две операции doOnNext и doOnEach, заметил, что они по своему поведению кажутся схожими, но не совсем ясно, в чем различия и когда следует использовать каждую из них.
Вот пример кода:
.doOnEach(new Action1<Notification<? super MessageProfile>>() {
@Override
public void call(Notification<? super MessageProfile> notification) {
}
})
.doOnNext(new Action1<MessageProfile>() {
@Override
public void call(MessageProfile profile) {
messageProfileDao.save(profile);
}
})
Хотя обе операции выполняют функции по реагированию на элементы, мне не совсем очевидно, в чем различия между ними и в каких ситуациях использовать каждую из них.
Буду признателен за разъяснение!
1 ответ(ов)
Они действительно довольно близки.
Одно из отличий (хотя это может быть не совсем очевидно в javadoc, скорее видно в исходном коде) заключается в том, что в doOnEach вы также получаете обертки Notification для ошибок и события завершения.
Вы можете проверить, является ли событие isOnNext, isOnCompleted или isOnError, чтобы определить, для какого именно события вы получили уведомление.
Таким образом, у вас есть одно Action.call, чтобы управлять всеми событиями, вместо полноценного Observer.
Инициализация ArrayList в одну строчку
Что значит 'synchronized'?
Почему нет ConcurrentHashSet, если есть ConcurrentHashMap?
Как объявить массив в одну строку?
Какие проблемы следует учитывать при переопределении equals и hashCode в Java?