Middle
Quali operatori esistono in Flow?
sobes.tech AI
Risposta dell'AI
Ecco i principali operatori di Flow, raggruppati per categorie:
Trasformazione:
map: Applica una funzione di trasformazione a ogni valore.filter: Filtra i valori che non soddisfano il predicato.take: Prende solo i primi N valori.drop: Ignora i primi N valori.transform: Operatore più flessibile per trasformare da un Flow a un altro, emettendo zero o più valori per ogni valore in ingresso.
Combinazione:
zip: Combina i valori di due Flow in coppie.combine: Combina gli ultimi valori di due Flow.merge: Unisce i valori di più Flow in uno solo.
Lisciatura (Flattening):
flattenConcat: Combina Flow di Flow, processando i Flow interni sequenzialmente.flattenMerge: Combina Flow di Flow, processando i Flow interni in parallelo (con limitazione di concorrenza).
Gestione delle eccezioni:
catch: Intercetta le eccezioni e esegue un'azione o restituisce un valore di emergenza.retry: Riprova il Flow in caso di eccezione.
Operatori terminali:
collect: Raccoglie tutti i valori di un Flow.reduce: Aggrega i valori di un Flow in uno solo.toList: Converte un Flow in una lista.first: Prende solo il primo valore.single: Prende un valore singolo (lancia eccezione se ci sono più di uno).
Operatori di tempo (spesso di kotlinx.coroutines.flow.operators):
debounce: Emissione di un valore solo dopo una pausa nell'emissione.sample: Emissione dell'ultimo valore a intervalli di tempo.throttle: Limita la velocità di emissione dei valori.
Esempio di utilizzo di map:
flowOf(1, 2, 3)
.map { it * 2 } // Trasforma 1, 2, 3 in 2, 4, 6
.collect { println(it) }
Esempio di utilizzo di filter:
flowOf("apple", "banana", "cherry")
.filter { it.startsWith("b") } // Filtra, lasciando solo "banana"
.collect { println(it) }
Esempio di utilizzo di zip:
val numbers = flowOf(1, 2, 3)
val letters = flowOf("a", "b", "c")
numbers.zip(letters) { number, letter -> "$number$letter" } // Combina in "1a", "2b", "3c"
.collect { println(it) }