Интерфейс Sequence

Интерфейс Sequence представляет последовательность элементов, которая обрабатывается лениво (lazy evaluation). В отличие от коллекций, операции над последовательностью выполняются только когда требуется результат, и обрабатываются поэлементно без создания промежуточных коллекций. Это особенно полезно для больших наборов данных или цепочек преобразований.

Импорт

kotlinimport kotlin.sequences.Sequence

Синтаксис

kotlininterface Sequence<out T>

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

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

kotlinval seq1 = sequenceOf(1, 2, 3, 4, 5)
val seq2 = listOf(1, 2, 3, 4, 5).asSequence()
val seq3 = generateSequence(1) { it + 1 }.take(5)

Пример

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

kotlinval numbers = arrayOf(1, 2, 3, 4, 5)
val squaredSequence = numbers.asSequence().map { it * it }

for (num in squaredSequence) {
  println(num)
}

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

kotlin1
4
9
16
25

Пример

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

kotlinval infiniteSeq = generateSequence(1) { it * 2 }
val firstFive = infiniteSeq.take(5).toList()
println(firstFive)

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

kotlinList [1, 2, 4, 8, 16]

Пример

Фильтрация и преобразование последовательности:

kotlinval numbersSeq = sequenceOf(10, 20, 30, 40, 50)
val result = numbersSeq
  .filter { it > 25 }
  .map { it / 10 }
  .toList()
  
println(result)

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

kotlinList [3, 4, 5]

Пример

Создание последовательности с помощью sequence builder:

kotlinval customSeq = sequence {
  yield(1)
  yieldAll(listOf(2, 3, 4))
  yield(5)
}

val res = customSeq.toList()
println(res)

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

kotlinList [1, 2, 3, 4, 5]

Основные операции

Sequence поддерживает большинство операций как у коллекций:

kotlinval seq = sequenceOf(1, 2, 3, 4, 5)

val filtered = seq.filter { it % 2 == 0 }
val mapped = seq.map { it * 10 }
val first = seq.first()
val last = seq.last()
val count = seq.count()

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

  • интерфейс Iterable,
    который представляет итерируемую коллекцию
  • интерфейс List,
    который представляет список элементов
  • интерфейс Collection,
    который представляет базовый интерфейс коллекций
  • класс Array,
    который представляет массив элементов