Middle
Quels opérateurs existent dans Flow?
sobes.tech IA
Réponse de l'IA
Voici les principaux opérateurs de Flow, regroupés par catégories:
Transformation :
map: Applique une fonction de transformation à chaque valeur.filter: Filtre les valeurs ne correspondant pas au prédicat.take: Prend uniquement les N premières valeurs.drop: Ignore les N premières valeurs.transform: Opérateur plus flexible pour transformer d'un Flow à un autre, émettant zéro ou plusieurs valeurs pour chaque valeur d'entrée.
Combinaison :
zip: Combine les valeurs de deux Flow en paires.combine: Combine les dernières valeurs de deux Flow.merge: Fusionne les valeurs de plusieurs Flow en un seul.
Lissage (Flattening) :
flattenConcat: Combine des Flow de Flow, traitant les Flow internes séquentiellement.flattenMerge: Combine des Flow de Flow, traitant les Flow internes en parallèle (avec limite de concurrence).
Gestion des exceptions :
catch: Intercepte les exceptions et effectue une action ou retourne une valeur d'urgence.retry: Réessaie le Flow en cas d'exception.
Opérateurs terminaux :
collect: Récupère toutes les valeurs du Flow.reduce: Agrège les valeurs du Flow en une seule.toList: Convertit le Flow en liste.first: Prend uniquement la première valeur.single: Prend une seule valeur (lance une exception s'il y en a plus d'une).
Opérateurs de temps (souvent de kotlinx.coroutines.flow.operators) :
debounce: Émet une valeur uniquement après une pause dans l'émission.sample: Émet la dernière valeur à intervalles réguliers.throttle: Limite la vitesse d'émission des valeurs.
Exemple d'utilisation de map :
flowOf(1, 2, 3)
.map { it * 2 } // Transforme 1, 2, 3 en 2, 4, 6
.collect { println(it) }
Exemple d'utilisation de filter :
flowOf("apple", "banana", "cherry")
.filter { it.startsWith("b") } // Filtre, ne laissant que "banana"
.collect { println(it) }
Exemple d'utilisation de zip :
val numbers = flowOf(1, 2, 3)
val letters = flowOf("a", "b", "c")
numbers.zip(letters) { number, letter -> "$number$letter" } // Combine en "1a", "2b", "3c"
.collect { println(it) }