В чем разница между Observable, Completable и Single в RxJava

Может ли кто-нибудь объяснить разницу между Observable, Completable и Single in RxJava с четкими примерами?

В каком сценарии мы используем один над другими?

Ответ 1

Observable - это общий строительный блок ReactiveX, источник события, который испускает значения с течением времени. (и, следовательно, существует в каждом языке, на котором распространяется ReactiveX)
Короче. Наблюдаемые события:
onNext * (onCompleted | onError)?/(* ноль или более? - ноль или 1)

Single и Completable - это новые типы, введенные исключительно в RxJava, которые представляют собой уменьшенные типы Observable, которые имеют более сжатый API.

Single представляют Observable которые испускают одно значение или ошибку.

Completable представляют Observable который не испускает значения, но только события терминала, либо onError либо onCompleted

Вы можете думать о различиях, как о различиях метода, который возвращает:

  • Коллекция объектов - наблюдаемая

  • Однолокальный объект - Single

  • и метод, который не возвращает значения (метод void) - Completable.

Single может быть уместным, если у вас есть ориентированный на задачи Observable, и вы ожидаете одно значение, например, запрос сети, который выполняется один раз, и возвращаемое значение (или ошибка), сетевой вызов работает один раз, то есть вы не ожидаете, что он вернет дополнительные значения со временем. Другим примером является работа с данными из базы данных DB.

Completable подходит, если у вас есть Observable и вы не заботитесь о значении, полученном в результате операции, или нет. Например, например, обновление кеша, операция может либо преуспеть/сбой, но нет значения.
Другим примером является некоторая длительная операция init, которая ничего не возвращает. Это может быть сетевой вызов UPDATE/PUT, результатом которого является только индикация успеха.

В любом случае, Completable и Single не добавляют новые возможности, но они внедряют более надежные и сжатые API, которые больше описывают операции над Observable, которые открываются API.

Редактировать:

RxJava2 Maybe:

RxJava2 добавил новый тип под названием Maybe Maybe это комбинация Completable и Single.

На том же языке, что и выше, Maybe можно рассматривать как метод, который возвращает Optional какой-либо тип. Optional - это оболочка вокруг объекта, которая явно указывает, есть ли у нас какое-то значение - Object или нет (вместо null).
Maybe мы можем либо иметь какое-то значение точно так же, как Single или ничего не вернуть - точно так же, как Completable. Кроме того, как и то, и другое, мы имеем ошибку.
Maybe это ценно, когда мы хотим отметить, что Observable может не иметь значения и будет просто закончен.
Пример будет извлечен из кеша, мы не обязательно будем иметь значение в кеше, поэтому в этом случае мы закончим, ow, мы получим onNext со значением из кеша.
Это также полезно обрабатывать ненулевые значения в потоке с RxJava2.

RxJava2 Flowable:

Сначала определите противодавление. Противодавление - это средство обработки ситуации, когда данные генерируются быстрее, чем их можно обрабатывать. Flowable имеет поддержку противодавления, позволяющую запрашивать элементы в нижнем течении. Вы можете больше узнать о различиях здесь.

Ответ 2

  1. Flowable и Observable могут представлять конечные или бесконечные потоки. Текучий поддержка обратного давления.
  2. Single - это потоки с одним элементом.
  3. Возможно, это потоки с 0 или одним элементом.
  4. Наконец, Completable представляет поток без элементов, т.е. Он может быть завершен без значения или неудачи.

Краткий ответ, который я нашел здесь, в разделе RXJava.