Что выведет код Middle Flow, StateFlow и SharedFlow обновлено

Цепочка операторов Flow

Вопрос

Что выведет код? По строке на каждый вывод.

import kotlinx.coroutines.*
import kotlinx.coroutines.flow.*

fun main() = runBlocking {
    val result = (1..10).asFlow()
        .filter { it % 2 == 0 }
        .map { it * it }
        .onEach { if (it > 50) println("big $it") }
        .take(4)
        .toList()
    println(result)
    println(flowOf("a", "b").zip(flowOf(1, 2, 3)) { s, n -> "$s$n" }.toList())
}

Попробуйте сами

Напишите, что выведет код: каждый вывод с новой строки.

Показать ответ и разбор

Коротко

Код выведет: big 64, [4, 16, 36, 64], [a1, b2]. Чётные 2, 4, 6, 8 превращаются в квадраты 4, 16, 36, 64. onEach печатает только 64. take(4) после четвёртого значения отменяет поток, поэтому 10 уже не обрабатывается. zip делает пары по порядку и заканчивается вместе с более коротким…

Что выведет

big 64
[4, 16, 36, 64]
[a1, b2]

Разбор

Чётные 2, 4, 6, 8 превращаются в квадраты 4, 16, 36, 64. onEach печатает только 64. take(4) после четвёртого значения отменяет поток, поэтому 10 уже не обрабатывается. zip делает пары по порядку и заканчивается вместе с более коротким потоком.

Ответьте сами, а не прочитайте

В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.