В чем разница между Sequence и Iterable

«В чем разница между Sequence и Iterable» — вопрос из категории Kotlin, который задают на 23% собеседований Android Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Sequence — ленивая коллекция, обрабатывает элементы по одному (yield), подходит для больших данных или сложных цепочек операций. Операции (map, filter) выполняются только при терминальном вызове (toList(), first()).

Iterable — eager-коллекция, обрабатывает всю коллекцию сразу на каждом шаге, создавая промежуточные коллекции. Менее эффективен для цепочек операций.

// Sequence: выполняет операции лениво
val seq = sequenceOf(1, 2, 3).map { it * 2 }.filter { it > 3 } // Ничего не вычислено
println(seq.toList()) // [4, 6] — вычисление при терминальной операции

// Iterable: вычисляет сразу на каждом шаге
val list = listOf(1, 2, 3).map { it * 2 }.filter { it > 3 } // Сразу создает [2,4,6], затем [4,6]