假设我有一个Stream
长度1,000,000
全部为 1。
scala> val million = Stream.fill(100000000)(1)
million: scala.collection.immutable.Stream[Int] = Stream(1, ?)
scala> million filter (x => x % 2 == 0)
Exception in thread "main" java.lang.OutOfMemoryError: GC overhead limit exceeded
我得到一个Out of Memory
例外。
然后,我也尝试了同样的方法filter
打电话给List
.
scala> val y = List.fill(1000000)(1)
y: List[Int] = List(1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 ...
scala> y.filter(x => x % 2 == 0)
res2: List[Int] = List()
但它成功了。
为什么Stream#filter
这里内存不足,但是List#filter
完成得很好吗?
最后,随着大流,将filter
导致整个流的非惰性评估?