Функция asSequence
Функция asSequence преобразует коллекцию или массив
в последовательность типа Sequence. Это позволяет
выполнять цепочки операций (такие как filter, map)
лениво (отложенно), что может улучшить производительность
при работе с большими данными за счет избежания создания
промежуточных коллекций.
Синтаксис
fun <T> Iterable<T>.asSequence(): Sequence<T>
fun <T> Array<T>.asSequence(): Sequence<T>
fun ByteArray.asSequence(): Sequence<Byte>
fun ShortArray.asSequence(): Sequence<Short>
fun IntArray.asSequence(): Sequence<Int>
fun LongArray.asSequence(): Sequence<Long>
fun FloatArray.asSequence(): Sequence<Float>
fun DoubleArray.asSequence(): Sequence<Double>
fun BooleanArray.asSequence(): Sequence<Boolean>
fun CharArray.asSequence(): Sequence<Char>
fun <K, V> Map<K, V>.asSequence(): Sequence<Pair<K, V>>
Пример
Преобразуем список чисел в последовательность и выполним цепочку операций:
val numbers = listOf(1, 2, 3, 4, 5)
val seq = numbers.asSequence()
val res = seq
.filter { it > 2 }
.map { it * 2 }
.toList()
println(res)
Результат выполнения кода:
List<Int> [6, 8, 10]
Пример
Преобразуем массив символов в последовательность:
val chars = charArrayOf('a', 'b', 'c', 'd', 'e')
val seq = chars.asSequence()
val res = seq
.filter { it != 'c' }
.toList()
println(res)
Результат выполнения кода:
List<Char> ['a', 'b', 'd', 'e']
Пример
Преобразуем Map в последовательность пар:
val 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)
Результат выполнения кода:
Map {"b"=2, "c"=3}
Пример
Демонстрация отложенного выполнения операций с последовательностью:
val 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")
Результат выполнения кода:
With sequence (lazy):
filter: 1
filter: 2
filter: 3
map: 3
Result: 6
Смотрите также
-
функцию
toList,
которая преобразует последовательность обратно в список -
функцию
toSet,
которая преобразует последовательность в множество -
функцию
asIterable,
которая преобразует коллекцию в итерируемый объект