0Pricing
Kotlin Academy · Урок

Создание последовательностей

Из коллекций и генераторов

«Создание последовательностей» — бесплатный урок Kotlin Academy на CoddyKit. Это урок 2 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения Kotlin Academy, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс Kotlin Academy содержит 4 уроков всего.

Создание последовательностей

Есть несколько способов создать Sequence: из существующих коллекций, из элементов, с помощью функции-генератора или с помощью построителя. В этом уроке рассмотрен каждый способ.

Из коллекции с помощью asSequence

Самый распространённый способ — вызвать asSequence() у существующей коллекции, чтобы обрабатывать её лениво.

fun main() {
    val seq = listOf(1, 2, 3, 4).asSequence()
    val result = seq.map { it * 2 }.toList()
    println(result)
}

Из элементов с помощью sequenceOf

sequenceOf напрямую создаёт последовательность из фиксированного набора значений.

fun main() {
    val seq = sequenceOf("a", "b", "c")
    seq.forEach { println(it) }
}

Бесконечные последовательности с помощью generateSequence

generateSequence создаёт, возможно, бесконечную последовательность из начального значения и функции, вычисляющей следующий элемент. Используйте её вместе с take, чтобы ограничить последовательность.

fun main() {
    val powers = generateSequence(1) { it * 2 }
    val first5 = powers.take(5).toList()
    println(first5)
}

Остановка generateSequence

Если функция для получения следующего элемента возвращает null, последовательность завершается. Так можно генерировать элементы до выполнения определённого условия.

fun main() {
    val countdown = generateSequence(5) { if (it > 1) it - 1 else null }
    println(countdown.toList())
}

generateSequence без начального значения

Можно передать одну лямбда-функцию-генератор, которая возвращает следующее значение или null. Это удобно для ленивого чтения потоков ввода.

fun main() {
    var n = 0
    val seq = generateSequence { if (n < 3) n++ else null }
    println(seq.toList())
}

Построитель sequence

Построитель sequence { } позволяет императивно создавать элементы с помощью yield — одного значения — и yieldAll — множества значений.

fun main() {
    val seq = sequence {
        yield(1)
        yield(2)
        yieldAll(listOf(3, 4))
    }
    println(seq.toList())
}

Ленивое создание элементов

Построитель тоже работает лениво: код между вызовами yield выполняется только по мере получения элементов. В сочетании с take это позволяет безопасно описывать бесконечные генераторы.

fun main() {
    val naturals = sequence {
        var i = 1
        while (true) {
            yield(i)
            i++
        }
    }
    println(naturals.take(4).toList())
}

Числа Фибоначчи с помощью generateSequence

Классический пример: лениво создавать числа Фибоначчи, используя пару как состояние.

fun main() {
    val fib = generateSequence(Pair(0, 1)) { Pair(it.second, it.first + it.second) }
        .map { it.first }
    println(fib.take(8).toList())
}

Преобразование обратно в коллекцию

Последовательность становится конкретной коллекцией только после вызова конечной операции, например toList(), toSet() или toMutableList().

fun main() {
    val set = sequenceOf(1, 2, 2, 3).toSet()
    println(set)
}

Выбор способа создания

Используйте asSequence() для существующих данных, sequenceOf для фиксированных значений, generateSequence для вычисляемых рядов, а построитель sequence { } — для пользовательской императивной генерации.

Быстрая проверка

Как generateSequence понимает, когда нужно остановиться?

Итоги

Вы можете создавать последовательности с помощью asSequence(), sequenceOf, generateSequence — начальное значение и следующий элемент, завершение при null — и построителя sequence { } с yield и yieldAll. Далее Вы увидите, как ленивые операции избегают создания промежуточных списков.

Часто задаваемые вопросы

Урок «Создание последовательностей» бесплатный?

Да — полный текст урока «Создание последовательностей» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс Kotlin Academy, подпишись на CoddyKit PRO. Курс Kotlin Academy содержит 4 уроков всего.

Чему я научусь в уроке «Создание последовательностей»?

Из коллекций и генераторов Ты практикуешь Kotlin Academy с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.

Нужен ли мне опыт, чтобы начать Kotlin Academy?

Предыдущий опыт не требуется. Kotlin Academy на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 2 из 4.

Сколько времени занимает урок «Создание последовательностей»?

Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.

Можно ли писать и запускать код в этом уроке Kotlin Academy?

Да. Каждый урок Kotlin Academy включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.

Все уроки этого курса

  1. Зачем нужны последовательности
  2. Создание последовательностей
  3. Отложенные операции
  4. Последовательности и коллекции
← Назад к Kotlin Academy