Sobes.tech
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) }