Sobes.tech
Middle

Jaké operátory existují ve Flow?

sobes.tech AI

Odpověď od AI

Zde jsou hlavní operátory Flow, seskupené podle kategorií:

Transformace:

  • map: Aplikuje transformační funkci na každou hodnotu.
  • filter: Filtruje hodnoty, které nesplňují predikát.
  • take: Vezme pouze prvních N hodnot.
  • drop: Přeskočí prvních N hodnot.
  • transform: Flexibilnější operátor pro transformaci z jednoho Flow do druhého, emitující nula nebo více hodnot pro každou vstupní hodnotu.

Kombinace:

  • zip: Spojuje hodnoty dvou Flow do párů.
  • combine: Kombinuje poslední hodnoty dvou Flow.
  • merge: Spojuje hodnoty z více Flow do jednoho.

Vyhlazování (Flattening):

  • flattenConcat: Spojuje Flow z Flow, zpracovávající vnitřní Flow sekvenčně.
  • flattenMerge: Spojuje Flow z Flow, zpracovávající vnitřní Flow paralelně (s omezením concurrency).

Zpracování výjimek:

  • catch: Zachytává výjimky a provádí akci nebo vrací nouzovou hodnotu.
  • retry: Opakuje Flow při výskytu výjimky.

Terminální operátory:

  • collect: Sbírá všechny hodnoty z Flow.
  • reduce: Agreguje hodnoty Flow do jedné.
  • toList: Převádí Flow na seznam.
  • first: Vezme pouze první hodnotu.
  • single: Vezme jedinou hodnotu (vyhazuje výjimku, pokud je jich více).

Časové operátory (často z kotlinx.coroutines.flow.operators):

  • debounce: Vydává hodnotu pouze po pauze v emisii.
  • sample: Vydává poslední hodnotu v časovém intervalu.
  • throttle: Omezuje rychlost emisí hodnot.

Příklad použití map:

flowOf(1, 2, 3)
    .map { it * 2 } // Převádí 1, 2, 3 na 2, 4, 6
    .collect { println(it) }

Příklad použití filter:

flowOf("apple", "banana", "cherry")
    .filter { it.startsWith("b") } // Filtruje, ponechává pouze "banana"
    .collect { println(it) }

Příklad použití zip:

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