Введение в последовательности в Kotlin
Последовательность в Kotlin похожа на цепочку
filter и map у списка, но шаги
сначала только записываются. Обход элементов начинается,
когда появляется конечное действие - команда, которой
нужен готовый результат.
Список можно превратить в последовательность через
asSequence. Дальше к ней цепляют промежуточные
шаги. Они возвращают новую последовательность и сами
по себе элементы не перебирают.
Короткий пример: отбор чисел не меньше десяти и сбор результата в список в конце:
fun main() {
val nums = listOf(10, 14, 7, 20)
val chain = nums.asSequence()
.filter { it >= 10 }
val picked = chain.toList()
println(picked)
}
Пока вызван только filter, программа лишь
запомнила правило отбора. Сравнения с элементами
списка произойдут внутри toList, когда
цепочке понадобится собрать итог.
Переменная chain хранит описание шагов, а не
готовый список отфильтрованных чисел. Такой прием
удобен, когда данных много или цепочка длинная:
лишняя работа не выполняется, пока результат
действительно не запросят.
Конечное действие может быть другим - посчитать длину, взять первый элемент или свернуть значения. Общее правило одно: промежуточный шаг сам по себе не запускает полный проход по исходным данным.