Middle
Jakie operatory istnieją w Flow?
sobes.tech AI
Odpowiedź od AI
Oto główne operatory Flow, pogrupowane według kategorii:
Transformacja:
map: Zastosowuje funkcję transformacji do każdej wartości.filter: Filtruje wartości niepasujące do predykatu.take: Pobiera tylko pierwsze N wartości.drop: Pomija pierwsze N wartości.transform: Bardziej elastyczny operator do transformacji z jednego Flow na inny, emitując zero lub więcej wartości dla każdej wartości wejściowej.
Łączenie:
zip: Łączy wartości dwóch Flow parami.combine: Łączy ostatnie wartości dwóch Flow.merge: Łączy wartości z kilku Flow w jeden.
Wygładzanie (Flattening):
flattenConcat: Łączy Flow z Flow, przetwarzając wewnętrzne Flow sekwencyjnie.flattenMerge: Łączy Flow z Flow, przetwarzając wewnętrzne Flow równolegle (z ograniczeniem współbieżności).
Obsługa wyjątków:
catch: Przechwytuje wyjątki i wykonuje akcję lub zwraca wartość awaryjną.retry: Powtarza Flow w przypadku wystąpienia wyjątku.
Operatory końcowe:
collect: Zbiera wszystkie wartości z Flow.reduce: Agreguje wartości Flow do jednej.toList: Konwertuje Flow na listę.first: Pobiera tylko pierwszą wartość.single: Pobiera pojedynczą wartość (rzuca wyjątek, jeśli jest więcej niż jedna).
Operatory czasu (często z kotlinx.coroutines.flow.operators):
debounce: Emituje wartość tylko po przerwie w emisji.sample: Emituje ostatnią wartość w interwale czasowym.throttle: Ogranicza szybkość emisji wartości.
Przykład użycia map:
flowOf(1, 2, 3)
.map { it * 2 } // Zamienia 1, 2, 3 na 2, 4, 6
.collect { println(it) }
Przykład użycia filter:
flowOf("apple", "banana", "cherry")
.filter { it.startsWith("b") } // Filtruje, pozostawiając tylko "banana"
.collect { println(it) }
Przykład użycia zip:
val numbers = flowOf(1, 2, 3)
val letters = flowOf("a", "b", "c")
numbers.zip(letters) { number, letter -> "$number$letter" } // Łączy w "1a", "2b", "3c"
.collect { println(it) }