Middle
Ce operatori există în Flow?
sobes.tech AI
Răspuns de la AI
Iată operatorii principali ai Flow, grupați pe categorii:
Transformare:
map: Aplică o funcție de transformare fiecărui valoare.filter: Filtrează valorile care nu corespund predicatei.take: Ia doar primele N valori.drop: Ignoră primele N valori.transform: Un operator mai flexibil pentru a transforma dintr-un Flow în altul, emițând zero sau mai multe valori pentru fiecare valoare de intrare.
Combinare:
zip: Combină valorile a două Flow-uri în perechi.combine: Combină ultimele valori ale a două Flow-uri.merge: Combină valorile din mai multe Flow-uri într-unul singur.
Netezire (Flattening):
flattenConcat: Combină Flow-uri din Flow-uri, procesând Flow-urile interne secvențial.flattenMerge: Combină Flow-uri din Flow-uri, procesând Flow-urile interne în paralel (cu limitare de concurență).
Gestionarea excepțiilor:
catch: Capturează excepțiile și efectuează o acțiune sau returnează o valoare de urgență.retry: Reîncearcă Flow-ul în cazul unei excepții.
Operatori terminali:
collect: Colectează toate valorile din Flow.reduce: Agregă valorile Flow-ului într-una singură.toList: Convertește Flow-ul într-o listă.first: Ia doar prima valoare.single: Ia o singură valoare (aruncă excepție dacă sunt mai multe).
Operatori de timp (adesea din kotlinx.coroutines.flow.operators):
debounce: Emite o valoare doar după o pauză în emisie.sample: Emite ultima valoare la intervale de timp.throttle: Limitează viteza de emisie a valorilor.
Exemplu de utilizare a map:
flowOf(1, 2, 3)
.map { it * 2 } // Transformă 1, 2, 3 în 2, 4, 6
.collect { println(it) }
Exemplu de utilizare a filter:
flowOf("apple", "banana", "cherry")
.filter { it.startsWith("b") } // Filtrează, păstrând doar "banana"
.collect { println(it) }
Exemplu de utilizare a zip:
val numbers = flowOf(1, 2, 3)
val letters = flowOf("a", "b", "c")
numbers.zip(letters) { number, letter -> "$number$letter" } // Combină în "1a", "2b", "3c"
.collect { println(it) }