Middle
Ποιοι είναι οι χειριστές στο Flow;
sobes.tech AI
Απάντηση από AI
Ακολουθούν οι κύριοι χειριστές του Flow, ομαδοποιημένοι ανά κατηγορία:
Μετασχηματισμός:
map: Εφαρμόζει μια λειτουργία μετασχηματισμού σε κάθε τιμή.filter: Φιλτράρει τις τιμές που δεν πληρούν το predicate.take: Παίρνει μόνο τις πρώτες N τιμές.drop: Παραλείπει τις πρώτες N τιμές.transform: Ένας πιο ευέλικτος χειριστής για μετασχηματισμό από ένα Flow σε ένα άλλο, εκπέμποντας μηδέν ή περισσότερες τιμές για κάθε εισερχόμενη τιμή.
Συνδυασμός:
zip: Συνδυάζει τις τιμές δύο Flow σε ζεύγη.combine: Συνδυάζει τις τελευταίες τιμές δύο Flow.merge: Συνδυάζει τις τιμές από πολλαπλά Flow σε ένα.
Εξομάλυνση (Flattening):
flattenConcat: Συνδυάζει Flow από Flow, επεξεργαζόμενα τα εσωτερικά Flow διαδοχικά.flattenMerge: Συνδυάζει Flow από Flow, επεξεργαζόμενα τα εσωτερικά Flow παράλληλα (με περιορισμό της ταυτόχρονης εκτέλεσης).
Διαχείριση εξαιρέσεων:
catch: Πιάνει εξαιρέσεις και εκτελεί ενέργεια ή επιστρέφει μια έκτακτη τιμή.retry: Προσπαθεί ξανά το Flow σε περίπτωση εξαιρέσεως.
Τερματικοί χειριστές:
collect: Συλλέγει όλες τις τιμές από το Flow.reduce: Συγκεντρώνει τις τιμές του Flow σε μία.toList: Μετατρέπει το Flow σε λίστα.first: Παίρνει μόνο την πρώτη τιμή.single: Παίρνει μια μοναδική τιμή (ρίχνει εξαίρεση αν υπάρχουν περισσότερες).
Χειριστές χρόνου (συχνά από το kotlinx.coroutines.flow.operators):
debounce: Εκπέμπει μια τιμή μόνο μετά από παύση στην εκπομπή.sample: Εκπέμπει την τελευταία τιμή σε χρονικό διάστημα.throttle: Περιορίζει την ταχύτητα εκπομπής των τιμών.
Παράδειγμα χρήσης του map:
flowOf(1, 2, 3)
.map { it * 2 } // Μετατρέπει 1, 2, 3 σε 2, 4, 6
.collect { println(it) }
Παράδειγμα χρήσης του filter:
flowOf("apple", "banana", "cherry")
.filter { it.startsWith("b") } // Φιλτράρει, αφήνοντας μόνο το "banana"
.collect { println(it) }
Παράδειγμα χρήσης του zip:
val numbers = flowOf(1, 2, 3)
val letters = flowOf("a", "b", "c")
numbers.zip(letters) { number, letter -> "$number$letter" } // Συνδυάζει σε "1a", "2b", "3c"
.collect { println(it) }