Sobes.tech
Middle

Aké operátory existujú vo Flow?

sobes.tech AI

Odpoveď od AI

Tu sú hlavné operátory Flow, roztriedené podľa kategórií:

Transformácia:

  • map: Aplikuje transformačnú funkciu na každú hodnotu.
  • filter: Filtruje hodnoty, ktoré nespĺňajú predikát.
  • take: Vzatie prvých N hodnôt.
  • drop: Preskočí prvých N hodnôt.
  • transform: Flexibilnejší operátor na transformáciu z jedného Flow do druhého, emitujúc nula alebo viac hodnôt pre každú vstupnú hodnotu.

Kombinovanie:

  • zip: Zlúči hodnoty dvoch Flow párovo.
  • combine: Kombinuje posledné hodnoty dvoch Flow.
  • merge: Zlúči hodnoty z viacerých Flow do jedného.

Vyhladzovanie (Flattening):

  • flattenConcat: Zlúči Flow z Flow, spracovávajúc vnútorné Flow sekvenčne.
  • flattenMerge: Zlúči Flow z Flow, spracovávajúc vnútorné Flow paralelne (s obmedzením concurrency).

Spracovanie výnimiek:

  • catch: Zachytáva výnimky a vykonáva akciu alebo vracia chybovú hodnotu.
  • retry: Opakuje Flow pri výskyte výnimky.

Terminálne operátory:

  • collect: Zhromažďuje všetky hodnoty z Flow.
  • reduce: Agreguje hodnoty Flow do jednej.
  • toList: Prevod Flow na zoznam.
  • first: Vzatie iba prvej hodnoty.
  • single: Vzatie jedinej hodnoty (vyhodí výnimku, ak je viacero hodnôt).

Operátory času (často z kotlinx.coroutines.flow.operators):

  • debounce: Emituje hodnotu až po prestávke v emisiách.
  • sample: Emituje poslednú hodnotu po časovom intervale.
  • throttle: Obmedzuje rýchlosť emisií hodnôt.

Príklad použitia map:

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

Príklad použitia filter:

flowOf("apple", "banana", "cherry")
    .filter { it.startsWith("b") } // Filtruje, ponechávajúc iba "banana"
    .collect { println(it) }

Príklad použitia zip:

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