Middle
Кои оператори съществуват във Flow?
sobes.tech AI
Отговор от AI
Ето основните оператори на Flow, групирани по категории:
Преобразуване:
map: Прилага функция за преобразуване към всяка стойност.filter: Филтрира стойностите, които не отговарят на предиката.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) }