Sobes.tech
Middle

¿Qué operadores existen en Flow?

sobes.tech AI

Respuesta de la IA

Aquí están los operadores principales de Flow, agrupados por categorías:

Transformación:

  • map: Aplica una función de transformación a cada valor.
  • filter: Filtra los valores que no cumplen con el predicado.
  • take: Toma solo los primeros N valores.
  • drop: Omite los primeros N valores.
  • transform: Operador más flexible para transformar de un Flow a otro, emitiendo cero o más valores por cada valor de entrada.

Combinación:

  • zip: Combina los valores de dos Flow en pares.
  • combine: Combina los últimos valores de dos Flow.
  • merge: Combina valores de varios Flow en uno solo.

Suavizado (Flattening):

  • flattenConcat: Combina Flow de Flow, procesando los Flow internos secuencialmente.
  • flattenMerge: Combina Flow de Flow, procesando los Flow internos en paralelo (con limitación de concurrencia).

Manejo de excepciones:

  • catch: Captura excepciones y realiza una acción o devuelve un valor de emergencia.
  • retry: Reintenta el Flow en caso de excepción.

Operadores terminales:

  • collect: Recoge todos los valores de un Flow.
  • reduce: Agrega los valores de un Flow en uno solo.
  • toList: Convierte un Flow en una lista.
  • first: Toma solo el primer valor.
  • single: Toma un valor único (lanza excepción si hay más de uno).

Operadores de tiempo (frecuentemente de kotlinx.coroutines.flow.operators):

  • debounce: Emite un valor solo después de una pausa en la emisión.
  • sample: Emite el último valor en un intervalo de tiempo.
  • throttle: Limita la velocidad de emisión de valores.

Ejemplo de uso de map:

flowOf(1, 2, 3)
    .map { it * 2 } // Transforma 1, 2, 3 en 2, 4, 6
    .collect { println(it) }

Ejemplo de uso de filter:

flowOf("apple", "banana", "cherry")
    .filter { it.startsWith("b") } // Filtra, dejando solo "banana"
    .collect { println(it) }

Ejemplo de uso de zip:

val numbers = flowOf(1, 2, 3)
val letters = flowOf("a", "b", "c")
numbers.zip(letters) { number, letter -> "$number$letter" } // Combina en "1a", "2b", "3c"
    .collect { println(it) }