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

Создание потока в Kotlin

Новый поток собирают вызовом flow с лямбдой-строителем. Внутри доступен приемник FlowCollector: через него же работает emit, отправляя очередное значение сборщику.

Один блок может отдать сколько угодно элементов - каждый emit приостанавливает строитель, пока текущее значение не обработано:

import kotlinx.coroutines.flow.collect import kotlinx.coroutines.flow.flow import kotlinx.coroutines.runBlocking fun main() { runBlocking { val sizes = flow { emit("S") emit("M") emit("L") } sizes.collect { tag -> println(tag) } } }

Три метки печатаются подряд без пропусков: поток живет в одной корутине сборщика и не смешивает порядок emit.

Между отправками допустимы обычные вычисления и ветвления - в поток уходят уже готовые результаты:

import kotlinx.coroutines.flow.collect import kotlinx.coroutines.flow.flow import kotlinx.coroutines.runBlocking fun main() { runBlocking { val scores = flow { for (n in 1..3) { val points = n * 10 emit(points) } } scores.collect { value -> println(value) } } }

Числа 10, 20 и 30 отражают цикл внутри строителя. Так один flow описывает и правило, и всю последовательность на выходе.

Опишите поток из трех строк "red", "green" и "blue" через отдельные emit. Соберите его в runBlocking и выведите каждую строку с новой строки.

Внутри flow пройдите по числам от 1 до 4 и отправьте в поток квадрат индекса. Соберите результат и напечатайте все четыре числа.

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