Функция asSequence

Функция asSequence преобразует коллекцию или массив в последовательность типа Sequence<T>. Это позволяет выполнять цепочки операций (такие как filter, map) лениво (отложенно), что может улучшить производительность при работе с большими данными за счет избежания создания промежуточных коллекций.

Синтаксис

kotlinfun <T> Iterable<T>.asSequence(): Sequence<T>
kotlinfun <T> Array<T>.asSequence(): Sequence<T>
kotlinfun ByteArray.asSequence(): Sequence<Byte>
kotlinfun ShortArray.asSequence(): Sequence<Short>
kotlinfun IntArray.asSequence(): Sequence<Int>
kotlinfun LongArray.asSequence(): Sequence<Long>
kotlinfun FloatArray.asSequence(): Sequence<Float>
kotlinfun DoubleArray.asSequence(): Sequence<Double>
kotlinfun BooleanArray.asSequence(): Sequence<Boolean>
kotlinfun CharArray.asSequence(): Sequence<Char>
kotlinfun <K, V> Map<K, V>.asSequence(): Sequence<Pair<K, V>>

Пример

Преобразуем список чисел в последовательность и выполним цепочку операций:

kotlinval numbers = listOf(1, 2, 3, 4, 5)
val seq = numbers.asSequence()

val res = seq
  .filter { it > 2 }
  .map { it * 2 }
  .toList()
  
println(res)

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

kotlinList<Int> [6, 8, 10]

Пример

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

kotlinval chars = charArrayOf('a', 'b', 'c', 'd', 'e')
val seq = chars.asSequence()

val res = seq
  .filter { it != 'c' }
  .toList()
  
println(res)

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

kotlinList<Char> ['a', 'b', 'd', 'e']

Пример

Преобразуем Map в последовательность пар:

kotlinval map = mapOf("a" to 1, "b" to 2, "c" to 3)
val seq = map.asSequence()

val res = seq
  .filter { it.value > 1 }
  .toMap()
  
println(res)

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

kotlinMap {"b"=2, "c"=3}

Пример

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

kotlinval numbers = listOf(1, 2, 3, 4, 5)

println("With sequence (lazy):")
val seqResult = numbers.asSequence()
  .filter {
    println("filter: $it")
    it > 2
  }
  .map {
    println("map: $it")
    it * 2
  }
  .first()
  
println("Result: $seqResult")

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

kotlinWith sequence (lazy):
filter: 1
filter: 2
filter: 3
map: 3
Result: 6

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

  • функцию toList,
    которая преобразует последовательность обратно в список
  • функцию toSet,
    которая преобразует последовательность в множество
  • функцию asIterable,
    которая преобразует коллекцию в итерируемый объект