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) }