Порядок шагов в Kotlin
Шаги последовательности выполняются в том порядке,
в котором они записаны. Один и тот же набор команд
дает разный объем работы, если переставить
filter и map местами.
Сначала оставим числа не меньше четырех, потом удвоим каждое:
fun main() {
val nums = listOf(2, 3, 4, 5)
val viaFilter = nums.asSequence()
.filter { it >= 4 }
.map { it * 2 }
.toList()
println(viaFilter)
}
Функция map сработает только для двух отобранных
значений. Если сначала удвоить каждое число, а
потом оставить результат больше шести, отбор
пойдет по другому набору промежуточных данных:
fun main() {
val nums = listOf(2, 3, 4, 5)
val viaMap = nums.asSequence()
.map { it * 2 }
.filter { it > 6 }
.toList()
println(viaMap)
}
Список [8, 10] совпадает с первым
вариантом, но map во втором случае
выполнился четыре раза. На длинной цепочке
такая перестановка заметно меняет объем работы.
Дан список listOf(1, 2, 3, 4, 5).
Сначала оставьте числа больше двух, затем
прибавьте единицу и соберите список. Выведите
его и запомните длину цепочки отбора.
Для того же списка прибавьте единицу до отбора
по условию it > 2. Сравните результат
с предыдущей задачей и отметьте, сколько раз
сработало преобразование в каждом варианте.