Sobes.tech
Middle

Welche Operatoren gibt es in Flow?

sobes.tech KI

Antwort von AI

Hier sind die wichtigsten Flow-Operatoren, gruppiert nach Kategorien:

Transformation:

  • map: Wendet eine Transformationsfunktion auf jeden Wert an.
  • filter: Filtert Werte, die nicht dem Prädikat entsprechen.
  • take: Nimmt nur die ersten N Werte.
  • drop: Überspringt die ersten N Werte.
  • transform: Ein flexiblerer Operator zum Transformieren von einem Flow in einen anderen, der null oder mehr Werte für jeden Eingabewert ausstrahlt.

Kombination:

  • zip: Kombiniert die Werte zweier Flows paarweise.
  • combine: Kombiniert die letzten Werte zweier Flows.
  • merge: Vereint Werte aus mehreren Flows in einen.

Glättung (Flattening):

  • flattenConcat: Vereint Flows aus Flows, verarbeitet die inneren Flows sequenziell.
  • flattenMerge: Vereint Flows aus Flows, verarbeitet die inneren Flows parallel (mit Begrenzung der Parallelität).

Fehlerbehandlung:

  • catch: Fängt Ausnahmen ab und führt eine Aktion aus oder gibt einen Notfallwert zurück.
  • retry: Versucht den Flow bei Ausnahme erneut.

Terminal-Operatoren:

  • collect: Sammelt alle Werte aus einem Flow.
  • reduce: Aggregiert die Werte eines Flows zu einem.
  • toList: Wandelt einen Flow in eine Liste um.
  • first: Nimmt nur den ersten Wert.
  • single: Nimmt einen einzelnen Wert (wirft eine Ausnahme, wenn mehr als einer vorhanden ist).

Zeit-Operatoren (häufig aus kotlinx.coroutines.flow.operators):

  • debounce: Gibt einen Wert nur nach einer Pause in der Ausstrahlung aus.
  • sample: Gibt den letzten Wert in einem Zeitintervall aus.
  • throttle: Begrenzung der Geschwindigkeit der Ausstrahlung von Werten.

Beispiel für die Verwendung von map:

flowOf(1, 2, 3)
    .map { it * 2 } // Wandelt 1, 2, 3 in 2, 4, 6 um
    .collect { println(it) }

Beispiel für die Verwendung von filter:

flowOf("apple", "banana", "cherry")
    .filter { it.startsWith("b") } // Filtert, lässt nur "banana" übrig
    .collect { println(it) }

Beispiel für die Verwendung von zip:

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