Middle
Quais operadores existem no Flow?
sobes.tech IA
Resposta da IA
Aqui estão os principais operadores de Flow, agrupados por categorias:
Transformação:
map: Aplica uma função de transformação a cada valor.filter: Filtra os valores que não correspondem ao predicado.take: Toma apenas os primeiros N valores.drop: Ignora os primeiros N valores.transform: Operador mais flexível para transformar de um Flow para outro, emitindo zero ou mais valores para cada valor de entrada.
Combinação:
zip: Combina os valores de dois Flow em pares.combine: Combina os últimos valores de dois Flow.merge: Combina valores de vários Flow em um só.
Suavização (Flattening):
flattenConcat: Combina Flow de Flow, processando os Flow internos sequencialmente.flattenMerge: Combina Flow de Flow, processando os Flow internos em paralelo (com limitação de concorrência).
Manipulação de exceções:
catch: Captura exceções e realiza uma ação ou retorna um valor de emergência.retry: Re tenta o Flow em caso de exceção.
Operadores terminais:
collect: Reúne todos os valores de um Flow.reduce: Agrega os valores de um Flow em um só.toList: Converte um Flow em uma lista.first: Toma apenas o primeiro valor.single: Toma um valor único (lança exceção se houver mais de um).
Operadores de tempo (frequentemente de kotlinx.coroutines.flow.operators):
debounce: Emite um valor apenas após uma pausa na emissão.sample: Emite o último valor em um intervalo de tempo.throttle: Limita a velocidade de emissão de valores.
Exemplo de uso de map:
flowOf(1, 2, 3)
.map { it * 2 } // Transforma 1, 2, 3 em 2, 4, 6
.collect { println(it) }
Exemplo de uso de filter:
flowOf("apple", "banana", "cherry")
.filter { it.startsWith("b") } // Filtra, deixando apenas "banana"
.collect { println(it) }
Exemplo de uso de zip:
val numbers = flowOf(1, 2, 3)
val letters = flowOf("a", "b", "c")
numbers.zip(letters) { number, letter -> "$number$letter" } // Combina em "1a", "2b", "3c"
.collect { println(it) }