Operadores RxJava


A continuación se lista un conjunto de operadores de RxJava, es un listado con los operadores más usados. Para revisar la totalidad de ellos revisarlos en RxJava Operators.

De transformación:

map es el más importante y básico operador de transformación. Convierte un tipo de stream en otro tipo de stream.

flatMap es el más importante operador de orquestación, su función al igual que map es la de transformar pero adicionalmente puede retornar otro Observable. Con flatMap podemos paralelizar operaciones o trabajos, es útil cuando se necesita una relación entre streams de uno a muchos (por ejemplo un cliente que genera múltiples pedidos) y sobre todo es útil cuando la transformación retorna observables y no sólo objetos de tipo primitivo.

flatMapIterable es una operación especial para convertir single items a iterables.

delay pospone la emisión de un evento por un determinado tiempo.

concatMap es un flatMap con la diferencia de que preserva el orden de emisión.


De combinación:

merge y mergeWith son usados cuando tengo múltiples fuentes emisoras de eventos y quiero combinarlas en una única.

zip y zipWith son usados para combinar en pares los eventos emitidos por dos fuentes diferentes, se parte con el supuesto de que las fuentes emiten con la misma frecuencia, es decir se encuentran sincronizadas.

combineLatest usado para los casos en los que deseo aplicar una operación zip, pera las fuentes no emiten en frecuencias similares, es decir se no encuentran sincronizadas. Este operador evita los tiempos muertos de espera.

withLatestFrom es similar a combineLatest pero tiene en cuenta sólo los eventos emitidos por una de las fuentes.

amb y ambWith espera por el primer item emitido, una vez emitido el primer item toma como referencia la fuente que lo há emitido e ignora todas las demás fuentes de emisión.

De filtro:

scan es un acomulador que permite llevar la cuenta o el valor acomulado de los datos emitidos, el ejemplo de este tipo de operador es la operación factorial.

reduce es igual al operador scan con la diferencia de que emite sólo el último valor totalizado.

collect actua como el operador reduce, sin embargo usa un acomulador mutable.

distinct se encarga de filtrar datos repetidos, es decir recibe cada item la primera vez e ignora las futuras emisiones del mismo item.

distinctUntilChanged filtra ignorando las repeticiones de un elemento hasta que el valor del mismo haya cambiado.

take es un operador que trunca el número de items iniciales emitidos por una fuente.

skip es el inverso de take ya que omite los items iniciales emitidos por una fuente.

first toma únicamente el primer item emitido por una fuente.

last toma únicamente el último item emitido por una fuente.

takeUntil toma los items emitidos hasta que se cumpla una condición incluyendo en el resultado el item que cumplió la condición.

takeWhile toma los items emitidos hasta que se cumple una condición pero no se incluye en el resultado el item que cumple con la condición.

elementAt toma el item emitido en la posición especificada.

..OrDefault es usado para especificar un valor de emisión por defecto cuando no se encuentra un resultado y en la mayoría de los casos evitar emitir una excepción.

count contabiliza el número de eventos que fueron emitidos, no confundir con el operador scan el cuál representa un acomulador de los valores emitidos.

all, exist, contain son operadores que validan la inclusión de un determinado tipo de item.

concat al igual que merge o zip permite unir dos fuentes de emisión con la diferencia de que el segundo sólo y únicamente si el primero ha sido finalizado su emisión.

Glosario:

Emisión: Evento de generar datos o información.

Observables: Componente que emite evento o representa un stream.

Stream: Flujo de datos o información.


Thanks for your comment