asc*_*erk 2 collections stream kotlin
forEach哪个,这意味着只会查看20个整数?码:
class Tests {
@Test
fun test() {
var counter = 0
(1..10_000_000).filter { it % 2 == 1 }.forEach {
counter++
if (counter > 10)
return
}
}
}
Run Code Online (Sandbox Code Playgroud)
您的代码示例使用操作Iterable<T>,该操作急切地工作:.filter { ... }调用将处理整个范围并生成存储中间结果的列表.
要改变这种情况,请考虑使用Sequence<T>(例如with .asSequence())懒惰地工作,以便中间操作例如.filter { ... }产生另一个懒惰序列,并且仅在终端操作查询项目时执行工作,例如.forEach { ... }:
(1..10000000).asSequence()
.filter { it % 2 == 1 }
.forEach { /* ... */ }
Run Code Online (Sandbox Code Playgroud)
请参阅:Kotlin的Iterable和Sequence看起来完全相同.为什么需要两种类型?
| 归档时间: |
|
| 查看次数: |
72 次 |
| 最近记录: |