Следите за новинками
в нашем Telegram канале. Жми, чтобы подписаться:)
⊗ktSpFwFt 186 of 299 menu
◀ ▶

Отбор в потоке в Kotlin

Не каждое значение из emit нужно сборщику. Функция filter оборачивает поток предикатом: если проверка ложна, элемент исчезает из цепочки, не вызывая лямбду collect.

Из смешанного набора чисел можно оставить только четные:

import kotlinx.coroutines.flow.collect import kotlinx.coroutines.flow.flow import kotlinx.coroutines.flow.filter import kotlinx.coroutines.runBlocking fun main() { runBlocking { flow { emit(1) emit(2) emit(3) emit(4) }.filter { n -> n % 2 == 0 } .collect { even -> println(even) } } }

Печатаются 2 и 4. Нечетные номера отброшены до приема, порядок оставшихся не нарушен.

Условие может опираться на свойства строк - например, длину:

import kotlinx.coroutines.flow.collect import kotlinx.coroutines.flow.flow import kotlinx.coroutines.flow.filter import kotlinx.coroutines.runBlocking fun main() { runBlocking { val tags = flow { emit("io") emit("data") emit("rx") }.filter { word -> word.length >= 4 } tags.collect { kept -> println(kept) } } }

До сборщика доходит только "data". Функция filter не создает новых значений - лишь сужает поток.

Из чисел 5, 10, 15 оставьте те, что больше 8, через filter. Выведите отобранные значения.

Поток букв "a", "bb", "ccc" соберите только с непустыми строками длиной не меньше двух символов.

← →
↑
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить