Collections kotlin中的流处理 Kotlin将如何处理以下代码 5000000个整数的集合将被创建为临时集合,还是筛选器将其结果立即反馈给forEach,这意味着只查看20个整数 如果没有,我将如何避免中间收集

Collections kotlin中的流处理 Kotlin将如何处理以下代码 5000000个整数的集合将被创建为临时集合,还是筛选器将其结果立即反馈给forEach,这意味着只查看20个整数 如果没有,我将如何避免中间收集,collections,stream,kotlin,Collections,Stream,Kotlin,代码: 您的代码示例使用上的操作,这非常有效:调用将处理整个范围并生成一个存储中间结果的列表 为了改变这一点,考虑懒惰地使用(例如使用),使中间操作如产生另一个懒惰序列,而只在终端查询如:时进行工作。 请参阅:只需将println(it)添加到filter中,您就可以很快看到问题的答案: //... .filter { println(it) it % 2 == 1 } //... 您将看到打印的每个编号。这是因为你的处理工作如前所述 如前所述,懒于营救:(1..10\u 000)

代码:


您的代码示例使用上的操作,这非常有效:调用将处理整个范围并生成一个存储中间结果的列表

为了改变这一点,考虑懒惰地使用(例如使用),使中间操作如产生另一个懒惰序列,而只在终端查询如:

时进行工作。
请参阅:

只需将
println(it)
添加到
filter
中,您就可以很快看到问题的答案:

//...
.filter {
   println(it)
   it % 2 == 1
}
//...
您将看到打印的每个编号。这是因为你的处理工作如前所述

如前所述,懒于营救:
(1..10\u 000)。asSequence()


现在,
过滤器中的
println(it)
将只打印数字
1..21
,这在您的示例中显然更可取

注意,如果lambdas是像
forEach
这样的函数的唯一参数,您可以省略括号,我修改了您的代码片段,希望没问题
(1..10000000).asSequence()
    .filter { it % 2 == 1 } 
    .forEach { /* ... */ }
//...
.filter {
   println(it)
   it % 2 == 1
}
//...