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