single rxjava2 rxjava just examples example completable rx-java rx-java2

rx-java - rxjava2 - rxjava single example



¿Cuál es la diferencia entre Observable, Completable y Single en RxJava? (2)

  1. Fluible y Observable puede representar flujos finitos o infinitos. Soporte fluido de contrapresión .
  2. Single son flujos con un solo elemento.
  3. Tal vez son secuencias con 0 o un elemento.
  4. Finalmente, un Completable representa una secuencia sin elementos, es decir, solo puede completarse sin un valor o fallar.

Una respuesta concisa que encontré here en la sección RXJava.

¿Alguien puede explicar la diferencia entre Observable, Completable y Single en RxJava con ejemplos claros?

¿En qué escenario usamos uno sobre los otros?


Observable es el bloque de construcción genérico ReactiveX, del origen del evento que emite valores a lo largo del tiempo. (y por lo tanto existe en todos los idiomas a los que ReactiveX se extiende)
en resumen Los eventos observables son:
onNext * (onCompleted | onError)? / (* cero o más? - cero o 1)

Single y Completable son nuevos tipos introducidos exclusivamente en RxJava que representan tipos reducidos de Observable , que tienen una API más concisa.

Single representa Observable que emite un valor único o error.

Completable representa Observable que no emite ningún valor, sino solo eventos terminales, ya sea onError o onCompleted

Puede pensar en las diferencias como las diferencias de un método que devuelve:

  • Colección de objetos - observables

  • Objeto único: único

  • y método que no devuelve ningún valor (método nulo) - Completable.

Single puede ser apropiado cuando tiene Observable orientado a tareas y espera un valor único, como la solicitud de red que se realiza una vez y el valor de retorno (o error), la llamada de red se opera de una sola vez, lo que significa que no espera que devuelva más valores a lo largo del tiempo. Otro ejemplo es la operación de recuperación de datos DB.

Completable es apropiado cuando tiene un Observable y no le importa el valor resultante de la operación, o no hay ninguno. Los ejemplos son la actualización de un caché, por ejemplo, la operación puede tener éxito / fallar, pero no hay ningún valor.
Otro ejemplo es una operación init de larga ejecución que no devuelve nada. Puede ser una llamada de red ACTUALIZAR / PONER que resultó solo con indicación de éxito.

En cualquier caso, Completable y Single no están agregando nuevas capacidades, sino que están introduciendo API más robustas y concisas, que informan más sobre las operaciones detrás del Observable que expuso la API.

Editar:

RxJava2 Maybe :

RxJava2 agregó un nuevo tipo llamado Maybe , Maybe es la combinación de Completable y Single.

En el mismo lenguaje que el anterior, Maybe se pueda considerar como un método que devuelve Optional de algún tipo, Optional es un contenedor alrededor de Object que explícitamente indica si tenemos algún valor en él: Object o no (en lugar de nulo).
Con Maybe , podemos tener algún valor exactamente como Single o no devolver nada, al igual que Completable . Además, como ambos, tenemos el error.
Maybe sea ​​valioso cuando queremos marcar que un Observable podría no tener un valor y simplemente se completará.
Se obtendría un ejemplo de la memoria caché, no necesariamente tendremos un valor en la memoria caché, por lo que en este caso, completaremos, ya que onNext a onNext con el valor de la memoria caché.
Esto también es digno de manejar valores no nulos en una secuencia con RxJava2.

RxJava2 Fluible:

Primero, definamos la contrapresión. La contrapresión es un medio de manejar la situación en la que los datos se generan más rápido de lo que se puede procesar. Flowable tiene soporte de contrapresión que permite solicitar artículos aguas abajo. Puedes leer más sobre las diferencias here .