Преимущество добавления asSequence () в массив в Kotlin - PullRequest
0 голосов
/ 11 октября 2018

Любой может помочь мне указать на разницу между использованием asSequence () в следующем фрагменте кода.

val numbers = 1 .. 50
    val output = numbers.filter{ it < 10 }.map{ Pair("Kotlin", it)}
    output.forEach(::println)

Добавление asSequence()

val numbers = 1 .. 50
val output = numbers.asSequence().filter{ it < 10 }.map{ Pair("Kotlin", it)}
output.forEach(::println)

1 Ответ

0 голосов
/ 11 октября 2018

Разница в том, что когда вы используете 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 не поддерживает параллельное выполнение).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...