Sobes.tech
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) }