Sobes.tech
Middle

Ce operatori există în Flow?

sobes.tech AI

Răspuns de la AI

Iată operatorii principali ai Flow, grupați pe categorii:

Transformare:

  • map: Aplică o funcție de transformare fiecărui valoare.
  • filter: Filtrează valorile care nu corespund predicatei.
  • take: Ia doar primele N valori.
  • drop: Ignoră primele N valori.
  • transform: Un operator mai flexibil pentru a transforma dintr-un Flow în altul, emițând zero sau mai multe valori pentru fiecare valoare de intrare.

Combinare:

  • zip: Combină valorile a două Flow-uri în perechi.
  • combine: Combină ultimele valori ale a două Flow-uri.
  • merge: Combină valorile din mai multe Flow-uri într-unul singur.

Netezire (Flattening):

  • flattenConcat: Combină Flow-uri din Flow-uri, procesând Flow-urile interne secvențial.
  • flattenMerge: Combină Flow-uri din Flow-uri, procesând Flow-urile interne în paralel (cu limitare de concurență).

Gestionarea excepțiilor:

  • catch: Capturează excepțiile și efectuează o acțiune sau returnează o valoare de urgență.
  • retry: Reîncearcă Flow-ul în cazul unei excepții.

Operatori terminali:

  • collect: Colectează toate valorile din Flow.
  • reduce: Agregă valorile Flow-ului într-una singură.
  • toList: Convertește Flow-ul într-o listă.
  • first: Ia doar prima valoare.
  • single: Ia o singură valoare (aruncă excepție dacă sunt mai multe).

Operatori de timp (adesea din kotlinx.coroutines.flow.operators):

  • debounce: Emite o valoare doar după o pauză în emisie.
  • sample: Emite ultima valoare la intervale de timp.
  • throttle: Limitează viteza de emisie a valorilor.

Exemplu de utilizare a map:

flowOf(1, 2, 3)
    .map { it * 2 } // Transformă 1, 2, 3 în 2, 4, 6
    .collect { println(it) }

Exemplu de utilizare a filter:

flowOf("apple", "banana", "cherry")
    .filter { it.startsWith("b") } // Filtrează, păstrând doar "banana"
    .collect { println(it) }

Exemplu de utilizare a zip:

val numbers = flowOf(1, 2, 3)
val letters = flowOf("a", "b", "c")
numbers.zip(letters) { number, letter -> "$number$letter" } // Combină în "1a", "2b", "3c"
    .collect { println(it) }