Назад к вопросам
Middle
112
questionbank
Какие существуют операторы в Flow?
Sobes Copilot
Получайте ответы в реальном времени
Ответ от нейросети
sobes.tech 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 (с ограничением concurrency).
Обработка исключений:
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) }