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 в одну строчку
Почему нет ConcurrentHashSet, если есть ConcurrentHashMap?
Как объявить массив в одну строку?
Загрузка JDK Java на Linux через wget приводит к отображению страницы лицензии вместо установки
Создание репозитория Spring без сущности