Разница в том, что когда вы используете Sequence
, он будет запускать функции, только если вы перебираете элементы.Так, например, это:
val numbers = 1 .. 50
val output = numbers.asSequence().filter{
println("Filtering $it")
it < 10
}.map{
println("Mapping $it")
Pair("Kotlin", it)
}
ничего не напечатает, потому что вы не выполняли итерации по output
.
. Проверка документов помогает:
/**
* Creates a [Sequence] instance that wraps the original collection
* returning its elements when being iterated.
*/
public fun <T> Iterable<T>.asSequence(): Sequence<T> {
return Sequence { this.iterator() }
}
Использование Sequence
s полезно, потому что если вы просто позвоните map
на Collection
, результат будет преобразован в List
, а с Sequence
вы можете избежать этих шагов преобразования.Подумайте о Sequence
с Stream
в Java Stream API (с той разницей, что решение Kotlin не поддерживает параллельное выполнение).