Sobes.tech
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) }