Следите за новинками
в нашем Telegram канале. Жми, чтобы подписаться:)
⊗ktSpSqLz 80 of 299 menu
◀ ▶

Отложенные шаги в Kotlin

Промежуточный шаг последовательности описывает, что сделать с каждым элементом, но не обязан выполняться сразу после записи цепочки. Пока нет конечного действия, тело шага может даже не вызываться.

В map добавим печать номера элемента и умножение, а конечный шаг намеренно не вызовем:

fun main() { val data = listOf(1, 2, 3) val pending = data.asSequence().map { println("map $it") it * 10 } println("built") }

В консоли появится только строка "built". Сообщения "map …" не печатаются: цепочка сохранена, но элементы еще не просили.

Если после построения вызвать toList, картина меняется - шаги выполняются по мере необходимости:

fun main() { val data = listOf(1, 2, 3) val pending = data.asSequence().map { println("map $it") it * 10 } println("built") println(pending.toList()) }

Сначала снова печатается "built", затем идут три строки "map", и только потом список умноженных чисел. Побочный эффект внутри map привязан к моменту, когда конечное действие реально тянет элементы из цепочки.

Дан список строк "a", "bb", "ccc". На шаге отбора печатайте длину каждой строки. Сначала соберите цепочку без конечного шага и напечатайте "wait". Затем получите список строк длиннее одного символа и выведите его.

Для чисел 4, 5 и 6 опишите последовательность, где на шаге преобразования печатается удвоенное значение. Выведите "start", затем сумму элементов и "end". Сверьте порядок строк в консоли.

← →
↑
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить