Что выведет код Junior Flow, StateFlow и SharedFlow обновлено
Холодный Flow собирают дважды
Вопрос
Что выведет код? По строке на каждый вывод.
import kotlinx.coroutines.*
import kotlinx.coroutines.flow.*
fun main() = runBlocking {
val f = flow {
println("start")
emit(1)
emit(2)
}.map { it * 10 }
println("created")
f.collect { println(it) }
println(f.first())
}
Попробуйте сами
Напишите, что выведет код: каждый вывод с новой строки.
Показать ответ и разбор
Коротко
Код выведет: created, start, 10, 20, start, 10. Создание Flow ничего не выполняет, поэтому сначала created.
Что выведет
created
start
10
20
start
10
Разбор
Создание Flow ничего не выполняет, поэтому сначала created. Каждый терминальный оператор запускает билдер заново: collect печатает start, 10 и 20. first() снова печатает start, берёт первое значение 10 и отменяет поток, второй emit уже не выполняется.
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.