Middle
Koji operatori postoje u Flow?
sobes.tech АИ
Одговор од АИ
Evo glavnih operatora Flow, grupisanih po kategorijama:
Transformacija:
map: Primjenjuje funkciju transformacije na svaku vrijednost.filter: Filtrira vrijednosti koje ne zadovoljavaju predikat.take: Uzima samo prvih N vrijednosti.drop: Preskače prvih N vrijednosti.transform: Fleksibilniji operator za transformaciju iz jednog Flow u drugi, emitirajući nula ili više vrijednosti za svaku ulaznu vrijednost.
Kombinovanje:
zip: Kombinuje vrijednosti dva Flow-a u parove.combine: Kombinuje posljednje vrijednosti dva Flow-a.merge: Spaja vrijednosti iz više Flow-ova u jedan.
Ugladnjivanje (Flattening):
flattenConcat: Kombinuje Flow od Flow, obrađujući unutarnje Flow-ove sekvencijalno.flattenMerge: Kombinuje Flow od Flow, obrađujući unutarnje Flow-ove paralelno (sa ograničenjem konkurentnosti).
Rukovanje izuzecima:
catch: Hvata izuzetke i izvršava akciju ili vraća hitnu vrijednost.retry: Pokušava ponovo Flow u slučaju izuzetka.
Terminalni operatori:
collect: Sakuplja sve vrijednosti iz Flow-a.reduce: Agregira vrijednosti Flow-a u jednu.toList: Pretvara Flow u listu.first: Uzima samo prvu vrijednost.single: Uzima jednu vrijednost (baca izuzetak ako ih je više).
Vremenski operatori (često iz kotlinx.coroutines.flow.operators):
debounce: Emituje vrijednost samo nakon pauze u emitovanju.sample: Emituje posljednju vrijednost u vremenskom intervalu.throttle: Ograničava brzinu emitovanja vrijednosti.
Primjer korištenja map:
flowOf(1, 2, 3)
.map { it * 2 } // Pretvara 1, 2, 3 u 2, 4, 6
.collect { println(it) }
Primjer korištenja filter:
flowOf("apple", "banana", "cherry")
.filter { it.startsWith("b") } // Filtrira, ostavljajući samo "banana"
.collect { println(it) }
Primjer korištenja zip:
val numbers = flowOf(1, 2, 3)
val letters = flowOf("a", "b", "c")
numbers.zip(letters) { number, letter -> "$number$letter" } // Kombinuje u "1a", "2b", "3c"
.collect { println(it) }