Sobes.tech
Middle

Koji operatori postoje u Flow?

sobes.tech АИ

Одговор од АИ

Evo glavnih operatora Flow, grupisanih po kategorijama:

Transformacija:

  • map: Primjenjuje funkciju transformacije na svaku vrijednost.
  • filter: Filtrira vrijednosti koje ne zadovoljavaju predikat.
  • take: Uzima samo prvih N vrijednosti.
  • drop: Preskače prvih N vrijednosti.
  • transform: Fleksibilniji operator za transformaciju iz jednog Flow u drugi, emitirajući nula ili više vrijednosti za svaku ulaznu vrijednost.

Kombinovanje:

  • zip: Kombinuje vrijednosti dva Flow-a u parove.
  • combine: Kombinuje posljednje vrijednosti dva Flow-a.
  • merge: Spaja vrijednosti iz više Flow-ova u jedan.

Ugladnjivanje (Flattening):

  • flattenConcat: Kombinuje Flow od Flow, obrađujući unutarnje Flow-ove sekvencijalno.
  • flattenMerge: Kombinuje Flow od Flow, obrađujući unutarnje Flow-ove paralelno (sa ograničenjem konkurentnosti).

Rukovanje izuzecima:

  • catch: Hvata izuzetke i izvršava akciju ili vraća hitnu vrijednost.
  • retry: Pokušava ponovo Flow u slučaju izuzetka.

Terminalni operatori:

  • collect: Sakuplja sve vrijednosti iz Flow-a.
  • reduce: Agregira vrijednosti Flow-a u jednu.
  • toList: Pretvara Flow u listu.
  • first: Uzima samo prvu vrijednost.
  • single: Uzima jednu vrijednost (baca izuzetak ako ih je više).

Vremenski operatori (često iz kotlinx.coroutines.flow.operators):

  • debounce: Emituje vrijednost samo nakon pauze u emitovanju.
  • sample: Emituje posljednju vrijednost u vremenskom intervalu.
  • throttle: Ograničava brzinu emitovanja vrijednosti.

Primjer korištenja map:

flowOf(1, 2, 3)
    .map { it * 2 } // Pretvara 1, 2, 3 u 2, 4, 6
    .collect { println(it) }

Primjer korištenja filter:

flowOf("apple", "banana", "cherry")
    .filter { it.startsWith("b") } // Filtrira, ostavljajući samo "banana"
    .collect { println(it) }

Primjer korištenja zip:

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