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