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