Rahel Lüthy
Rahel Lüthy

Reputation: 7007

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

I am a Scala beginner, practicing my FP skills with Project Euler.

While working on "Problem 5: What is the smallest positive number that is evenly divisible by all of the numbers from 1 to 20", I was comparing Range- vs. Stream-based solutions:

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

Strangely, the computation of r1 finishes in roughly 20 seconds, while the Stream-based calculation of r2 is running out of memory. I would have expected the opposite -- could anyone explain please?

Upvotes: 7

Views: 5952

Answers (1)

Tim Green
Tim Green

Reputation: 3649

For range it always takes fixed size of memory.

For stream it will cache all the element you are even used. So during find stream in r2 is keep increase until out of memory.

Upvotes: 7

Related Questions