Поток из готовых значений в Kotlin
Когда последовательность уже известна и не
требует вычислений между шагами, удобнее
flowOf. Функция принимает значения
перечислением и возвращает холодный Flow,
готовый к операторам и сбору.
Несколько строк передают аргументами - порядок
сохраняется при collect:
import kotlinx.coroutines.flow.collect
import kotlinx.coroutines.flow.flowOf
import kotlinx.coroutines.runBlocking
fun main() {
runBlocking {
flowOf("north", "east", "south")
.collect { side ->
println(side)
}
}
}
Три стороны света печатаются по одной строке.
Внутри flowOf нет явного emit,
но поведение при сборе такое же, как у
ручного строителя.
Функция flowOf часто стоит в начале цепочки
перед map или filter:
import kotlinx.coroutines.flow.collect
import kotlinx.coroutines.flow.flowOf
import kotlinx.coroutines.flow.map
import kotlinx.coroutines.runBlocking
fun main() {
runBlocking {
flowOf(3, 6, 9)
.map { v -> v / 3 }
.collect { part ->
println(part)
}
}
}
На выходе 1, 2 и 3.
Готовый поток не мешает комбинировать
операторы дальше по цепочке.
Соберите поток из чисел 100, 200,
300 через flowOf и выведите
каждое на отдельной строке.
Из трех меток "on", "off",
"on" сделайте поток и оставьте только
строки "on" с помощью filter.