【问题标题】:Advantage of adding asSequence() in Array in KotlinKotlin Array 中添加 asSequence() 的好处
【发布时间】:2023-03-10 02:45:01
【问题描述】:

谁能帮我指出下面这段代码中使用 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)

【问题讨论】:

标签: kotlin sequence


【解决方案1】:

不同之处在于,当您使用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() }
}

使用Sequences 很有用,因为如果您只是在Collection 上调用map,结果将被转换为List,而使用Sequence,您可以避免这些转换步骤。想想 Java Stream API 中的 Sequences 和 Streams 一样(不同的是 Kotlin 的解决方案不支持并行执行)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-12-18
    • 1970-01-01
    • 1970-01-01
    • 2013-08-25
    • 1970-01-01
    • 2021-03-22
    相关资源
    最近更新 更多