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

Преобразование потока в Kotlin

Сборщику не всегда нужны сырые значения из emit. Оператор map принимает функцию от элемента и возвращает поток, где каждая ячейка уже заменена результатом этой функции.

Строки можно привести к длине, не меняя исходный строитель:

import kotlinx.coroutines.flow.collect import kotlinx.coroutines.flow.flow import kotlinx.coroutines.flow.map import kotlinx.coroutines.runBlocking fun main() { runBlocking { val words = flow { emit("cat") emit("kotlin") }.map { text -> text.length } words.collect { len -> println(len) } } }

В консоли 3 и 6 - порядок сохраняется, меняется только вид данных на выходе map.

Цепочку операторов удобно читать сверху вниз: сначала источник, затем преобразование, в конце collect:

import kotlinx.coroutines.flow.collect import kotlinx.coroutines.flow.flow import kotlinx.coroutines.flow.map import kotlinx.coroutines.runBlocking fun main() { runBlocking { flow { emit(2) emit(4) emit(6) }.map { n -> n * n } .collect { square -> println(square) } } }

Квадраты 4, 16 и 36 приходят по одному, как и исходные числа. map не пропускает и не дублирует элементы - на каждый вход один выход.

Поток из строк "go" и "up" пропустите через map в верхний регистр. Соберите и выведите обе строки.

Из чисел 1, 2, 3 сделайте поток удвоенных значений через map и напечатайте результат сбора.

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