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

Ограничение числа в потоке в Kotlin

Источник может быть бесконечным или просто длиннее, чем нужно сейчас. take обрезает поток: после N принятых значений оператор отменяет дальнейший сбор, и строитель тоже останавливается.

Из длинной цепочки чисел можно взять только первые три:

import kotlinx.coroutines.flow.collect import kotlinx.coroutines.flow.flow import kotlinx.coroutines.flow.take import kotlinx.coroutines.runBlocking fun main() { runBlocking { flow { emit(10) emit(20) emit(30) emit(40) emit(50) }.take(3) .collect { value -> println(value) } } }

Печатаются 10, 20 и 30. Четвертое и пятое значения до collect не доходят.

Ограничение работает и на потоке с emit в цикле - лишние итерации не выполняются:

import kotlinx.coroutines.flow.collect import kotlinx.coroutines.flow.flow import kotlinx.coroutines.flow.take import kotlinx.coroutines.runBlocking fun main() { runBlocking { val stream = flow { var i = 0 while (true) { emit(i) i++ } }.take(2) stream.collect { n -> println(n) } } }

В консоли только 0 и 1. Бесконечный цикл в строителе прерван отменой после второго элемента.

Из потока букв "w", "x", "y", "z" возьмите первые две через take и выведите их.

Цикл от 0 до 9 отправляет индексы в поток. Оставьте только первые 4 числа и соберите их в runBlocking.

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