Scala Range(x,Int.MaxValue)与Stream.from(x)

Rah*_*thy 7 scala range stream

我是Scala初学者,用Project Euler练习我的FP技能.

在研究" 问题5:可以被1到20的所有数字整除的最小正数是多少"时,我正在比较基于范围与流的解决方案:

val r1 = Range(20, Int.MaxValue).find(i => (2 to 20).forall(i % _ == 0)).get
val r2 = Stream.from(20).find(i => (2 to 20).forall(i % _ == 0)).get
Run Code Online (Sandbox Code Playgroud)

奇怪的是,r1的计算在大约20秒内完成,而基于流的r2计算耗尽了内存.我本来期待相反的 - 有人可以解释一下吗?

Tim*_*een 7

对于范围,它总是需要固定大小的内存.

对于流,它将缓存您甚至使用的所有元素.所以在查找r2中的流时,一直保持增加直到内存不足.