Middle
Millised operaatorid on Flow-s olemas?
sobes.tech AI
Vastus AI-lt
Siin on Flow peamised operaatorid, jaotatud kategooriatesse:
Transformatsioon:
map: Rakendab teisendusfunktsiooni iga väärtuse jaoks.filter: Filtreerib väärtused, mis ei vasta predikaadile.take: Võtab ainult esimesed N väärtust.drop: Jätab vahele esimesed N väärtust.transform: Paindlikum operaator, mis võimaldab muuta ühe Flow teiseks, emitides null või rohkem väärtusi iga sisendväärtuse kohta.
Kombineerimine:
zip: Paaris ühendab kahe Flow väärtused.combine: ühendab kahe Flow viimased väärtused.merge: ühendab mitme Flow väärtused ühte.
Lamedamaks muutmine (Flattening):
flattenConcat: ühendab Flow-d Flow-st, töötades sisemiste Flow-dega järjestikku.flattenMerge: ühendab Flow-d Flow-st, töötades sisemiste Flow-dega paralleelselt (piiratud konkurentsiga).
Väljumise (Exception handling):
catch: püütab erandid ja teeb tegevuse või tagastab veaväärtuse.retry: proovib Flow-d uuesti, kui tekib erand.
Lõpp-operatorid:
collect: kogub kõik väärtused Flow-st.reduce: koondab väärtused üheks.toList: teisendab Flow nimekirjaks.first: võtab ainult esimese väärtuse.single: võtab ühe väärtuse (viskab erandi, kui väärtusi on rohkem kui üks).
Ajaoperaatorid (tihti kotlinx.coroutines.flow.operators-st):
debounce: emitib väärtuse ainult pärast pausi.sample: emitib viimase väärtuse ajaintervalliga.throttle: piirab väärtuste emitimise kiirust.
Näide map kasutamisest:
flowOf(1, 2, 3)
.map { it * 2 } // Muudab 1, 2, 3 2, 4, 6-ks
.collect { println(it) }
Näide filter kasutamisest:
flowOf("apple", "banana", "cherry")
.filter { it.startsWith("b") } // Jätab alles ainult "banana"
.collect { println(it) }
Näide zip kasutamisest:
val numbers = flowOf(1, 2, 3)
val letters = flowOf("a", "b", "c")
numbers.zip(letters) { number, letter -> "$number$letter" } // Ühendab "1a", "2b", "3c"
.collect { println(it) }