Sobes.tech
Middle

Welke operators zijn er in Flow?

sobes.tech AI

Antwoord van AI

Hier zijn de belangrijkste Flow-operatoren, gegroepeerd op categorie:

Transformatie:

  • map: Past een transformatie functie toe op elke waarde.
  • filter: Filtert waarden die niet voldoen aan de predicate.
  • take: Neemt alleen de eerste N waarden.
  • drop: Slaat de eerste N waarden over.
  • transform: Een flexibelere operator om van de ene Flow naar de andere te transformeren, waarbij nul of meer waarden worden uitgezonden voor elke invoerwaarde.

Combinatie:

  • zip: Combineert de waarden van twee Flow's in paren.
  • combine: Combineert de laatste waarden van twee Flow's.
  • merge: Combineert waarden uit meerdere Flow's in één.

Vlakmaken (Flattening):

  • flattenConcat: Combineert Flow van Flow, waarbij de interne Flow's sequentieel worden verwerkt.
  • flattenMerge: Combineert Flow van Flow, waarbij de interne Flow's parallel worden verwerkt (met beperking van concurrency).

Foutafhandeling:

  • catch: Vangt uitzonderingen op en voert een actie uit of geeft een noodgevalwaarde terug.
  • retry: Probeert de Flow opnieuw bij een uitzondering.

Terminal operators:

  • collect: Verzamelt alle waarden uit een Flow.
  • reduce: Agregeert de waarden van een Flow tot één.
  • toList: Zet een Flow om in een lijst.
  • first: Neemt alleen de eerste waarde.
  • single: Neemt een enkele waarde (gooit een uitzondering als er meer dan één is).

Tijd operators (vaak uit kotlinx.coroutines.flow.operators):

  • debounce: Emiteert een waarde alleen na een pauze in de uitzending.
  • sample: Emiteert de laatste waarde over een tijdsinterval.
  • throttle: Beperkt de snelheid van het uitzenden van waarden.

Voorbeeld van gebruik van map:

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

Voorbeeld van gebruik van filter:

flowOf("apple", "banana", "cherry")
    .filter { it.startsWith("b") } // Filtert, laat alleen "banana" over
    .collect { println(it) }

Voorbeeld van gebruik van zip:

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