gpt4 book ai didi

collections - kotlin 中的流处理

转载 作者:行者123 更新时间:2023-12-03 06:14:29 25 4
gpt4 key购买 nike

  • Kotlin 将如何运行以下代码?
  • 是否会创建 5000000 个整数的集合作为临时集合,或者过滤器是否会立即将其结果提供给 forEach(这意味着只会查看 20 个整数)?
  • 如果不是,我怎样才能避免中间收集?

代码:

class Tests {
@Test
fun test() {
var counter = 0
(1..10_000_000).filter { it % 2 == 1 }.forEach {
counter++
if (counter > 10)
return
}
}
}

最佳答案

您的代码示例使用 Iterable<T> 上的操作,它急切地工作: .filter { ... } 调用将处理整个范围并生成一个存储中间结果的列表。

要改变这一点,请考虑使用 Sequence<T> (例如 .asSequence() )延迟工作,以便中间操作,例如 .filter { ... } 生成另一个惰性序列,并且仅在终端操作(例如 .forEach { ... } )查询项目时才执行工作:

(1..10000000).asSequence()
.filter { it % 2 == 1 }
.forEach { /* ... */ }

参见:Kotlin's Iterable and Sequence look exactly same. Why are two types required?

关于collections - kotlin 中的流处理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48264574/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com