Создание последовательностей
Из коллекций и генераторов
«Создание последовательностей» — бесплатный урок 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 — локальная установка не требуется.
Все уроки этого курса
- Зачем нужны последовательности
- Создание последовательностей
- Отложенные операции
- Последовательности и коллекции