НОВИНКА!
Занимательная математика от Трепачёва. Присоединяйтесь к нам!
424 of 1310 menu

Функция sequence

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

Импорт

import kotlin.sequences.sequence

Синтаксис

fun <T> sequence(block: suspend SequenceScope<T>.() -> Unit): Sequence<T>
fun <T> sequence(vararg elements: T): Sequence<T>
fun <T> sequenceOf(vararg elements: T): Sequence<T>

Пример

Создание последовательности из нескольких элементов:

val seq: Sequence<Int> = sequenceOf(1, 2, 3, 4, 5) val res: List<Int> = seq.toList() println(res)

Результат выполнения кода:

List<Int> [1, 2, 3, 4, 5]

Пример

Создание последовательности с помощью функции sequence и ленивого генератора:

val seq: Sequence<Int> = sequence { yield(1) yieldAll(listOf(2, 3)) yield(4) yield(5) } val res: List<Int> = seq.toList() println(res)

Результат выполнения кода:

List<Int> [1, 2, 3, 4, 5]

Пример

Демонстрация ленивого выполнения операций с последовательностью:

val seq: Sequence<Int> = sequenceOf(1, 2, 3, 4, 5) .map { println("Mapping $it") it * 2 } .take(3) println("Sequence created") val res: List<Int> = seq.toList() println(res)

Результат выполнения кода:

Sequence created Mapping 1 Mapping 2 Mapping 3 List<Int> [2, 4, 6]

Пример

Создание бесконечной последовательности:

val infiniteSeq: Sequence<Int> = sequence { var i = 0 while (true) { yield(i++) } } val res: List<Int> = infiniteSeq.take(5).toList() println(res)

Результат выполнения кода:

List<Int> [0, 1, 2, 3, 4]

Пример

Сравнение производительности последовательностей и коллекций:

val numbers = 1..1000000 // Коллекция - все промежуточные коллекции создаются сразу val collectionResult = numbers .filter { it % 2 == 0 } .map { it * 2 } .take(10) .toList() // Последовательность - промежуточные операции выполняются лениво val sequenceResult = numbers.asSequence() .filter { it % 2 == 0 } .map { it * 2 } .take(10) .toList() println("Collection result: $collectionResult") println("Sequence result: $sequenceResult")

Результат выполнения кода:

Collection result: [4, 8, 12, 16, 20, 24, 28, 32, 36, 40] Sequence result: [4, 8, 12, 16, 20, 24, 28, 32, 36, 40]

Смотрите также

  • функцию transform,
    которая выполняет преобразования над коллекциями
  • функцию map,
    которая преобразует элементы коллекции
  • функцию filter,
    которая фильтрует элементы коллекции
  • функцию take,
    которая берет первые n элементов коллекции
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить