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) }