Middle
Kokie operatoriai yra Flow?
sobes.tech AI
Atsakymas iš AI
Čia yra pagrindiniai Flow operatoriai, suskirstyti į kategorijas:
Transformacija:
map: Taiko transformacijos funkciją kiekvienai reikšmei.filter: Filtruoja reikšmes, kurios neatitinka predikato.take: Imti tik pirmuosius N reikšmių.drop: Praleisti pirmuosius N reikšmių.transform: Lankstesnis operatorius, leidžiantis konvertuoti vieną Flow į kitą, išleidžiant nulį ar daugiau reikšmių kiekvienai įeinančiai reikšmei.
Kombinavimas:
zip: Poromis sujungia dviejų Flow reikšmes.combine: Sujungia dviejų Flow paskutines reikšmes.merge: Sujungia kelių Flow reikšmes į vieną.
Išlyginimas (Flattening):
flattenConcat: Sujungia Flow iš Flow, tvarkingai apdorodama vidinius Flow.flattenMerge: Sujungia Flow iš Flow, vykdydama vidinius Flow paraleliai (su ribotu konkurencija).
Išimčių apdorojimas:
catch: Gaudo išimtis ir atlieka veiksmą arba grąžina klaidos reikšmę.retry: Pakartoja Flow, jei įvyksta išimtis.
Terminaliniai operatoriai:
collect: Surenka visas reikšmes iš Flow.reduce: Agreguoja reikšmes į vieną.toList: Konvertuoja Flow į sąrašą.first: Imti tik pirmą reikšmę.single: Imti vieną reikšmę (išmes išimtį, jei yra daugiau nei viena).
Laiko operatoriai (dažnai iš kotlinx.coroutines.flow.operators):
debounce: Išleidžia reikšmę tik po pauzės.sample: Išleidžia paskutinę reikšmę per tam tikrą laiką.throttle: Apriboja reikšmių išleidimo greitį.
Pavyzdys naudojant map:
flowOf(1, 2, 3)
.map { it * 2 } // Paverčia 1, 2, 3 į 2, 4, 6
.collect { println(it) }
Pavyzdys naudojant filter:
flowOf("apple", "banana", "cherry")
.filter { it.startsWith("b") } // Filtruoja, paliekant tik "banana"
.collect { println(it) }
Pavyzdys naudojant zip:
val numbers = flowOf(1, 2, 3)
val letters = flowOf("a", "b", "c")
numbers.zip(letters) { number, letter -> "$number$letter" } // Sujungia į "1a", "2b", "3c"
.collect { println(it) }