Middle
Kādi operatori ir Flow?
sobes.tech AI
Atbilde no AI
Šeit ir galvenie Flow operatori, sadalīti pa kategorijām:
Pārveidošana:
map: Pielieto pārveidošanas funkciju katrai vērtībai.filter: Filtrē vērtības, kas neatbilst predikātam.take: ņem tikai pirmās N vērtības.drop: Izlaist pirmās N vērtības.transform: Elastīgāks operators, kas pārveido vienu Flow uz citu, emitējot nulli vai vairāk vērtības katram ieejas vērtībai.
Kombinēšana:
zip: Pārožējoši apvieno divu Flow vērtības.combine: Apvieno divu Flow pēdējās vērtības.merge: Apvieno vairākus Flow vērtības vienā.
Izlīdzināšana (Flattening):
flattenConcat: Apvieno Flow no Flow, secīgi apstrādājot iekšējos Flow.flattenMerge: Apvieno Flow no Flow, paralēli apstrādājot iekšējos Flow (ar ierobežotu konkurenci).
Izņēmumu apstrāde:
catch: Noķer izņēmumus un veic darbību vai atgriež kļūdas vērtību.retry: Mēģina atkārtoti Flow, ja rodas izņēmums.
Terminalie operatori:
collect: Savāc visas vērtības no Flow.reduce: Apvieno vērtības vienā.toList: Pārvērš Flow uz sarakstu.first: ņem tikai pirmo vērtību.single: ņem vienu vērtību (izmet izņēmumu, ja ir vairāk nekā viena).
Laika operatori (bieži no kotlinx.coroutines.flow.operators):
debounce: Izlaiž vērtību tikai pēc pauzes.sample: Izlaiž pēdējo vērtību noteiktā laika intervālā.throttle: Ierobežo vērtību izlaišanas ātrumu.
Piemērs ar map:
flowOf(1, 2, 3)
.map { it * 2 } // Pārveido 1, 2, 3 uz 2, 4, 6
.collect { println(it) }
Piemērs ar filter:
flowOf("apple", "banana", "cherry")
.filter { it.startsWith("b") } // Filtrē, atstājot tikai "banana"
.collect { println(it) }
Piemērs ar zip:
val numbers = flowOf(1, 2, 3)
val letters = flowOf("a", "b", "c")
numbers.zip(letters) { number, letter -> "$number$letter" } // Apvieno uz "1a", "2b", "3c"
.collect { println(it) }