Что выведет код Senior Коллекции и последовательности обновлено

Порядок вызовов в Sequence и в List

Вопрос

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

fun main() {
    val log = mutableListOf<String>()
    listOf(1, 2, 3)
        .map { log.add("m$it"); it * 10 }
        .filter { log.add("f$it"); it > 10 }
    println(log.joinToString(" "))
    log.clear()
    sequenceOf(1, 2, 3)
        .map { log.add("m$it"); it * 10 }
        .filter { log.add("f$it"); it > 10 }
        .first()
    println(log.joinToString(" "))
}

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

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

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

Коротко

Код выведет: m1 m2 m3 f10 f20 f30, m1 f10 m2 f20. Для списка каждая операция проходит всю коллекцию: сначала три map, потом три filter.

Что выведет

m1 m2 m3 f10 f20 f30
m1 f10 m2 f20

Разбор

Для списка каждая операция проходит всю коллекцию: сначала три map, потом три filter. Для последовательности элемент проходит цепочку целиком: 1 отображается в 10 и не проходит фильтр, 2 отображается в 20 и проходит, first() останавливает обработку, третий элемент вообще не тронут.

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

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