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