为什么我会为以下代码获取OutOfMemoryError?流中的奇怪OutOfMemoryError
Stream.from(1).filter(N =>(1至20).forall(X => N%X == 0))。头
为什么我会为以下代码获取OutOfMemoryError?流中的奇怪OutOfMemoryError
Stream.from(1).filter(N =>(1至20).forall(X => N%X == 0))。头
流具有在JVM上有一些限制。你在这里看到的问题是,你用Stream.from(1)
创建的Stream被放在堆栈上,因此JVM拒绝垃圾回收。您传递给filter
调用的谓词使流成长为232792560
元素。
如果使用Iterator
可以解决此限制:
Iterator.from(1).filter(n => (1 to 20).forall(x => n % x == 0)).next
耻辱你放弃答案! – 2010-09-02 15:47:40
答案在很多地方都可以找到,Randall。 – user7854212 2010-09-02 15:56:09
谢谢莫里茨。/ – user7854212 2010-09-02 15:57:10
流懒洋洋地评估,但他们存储他们的评价的结果。因此,除非您想多次遍历它们,否则应该使用Iterator
。
非常丰富。感谢雷克斯! – user7854212 2010-09-02 16:11:06
项目欧拉问题5,呃? – 2010-09-02 15:47:16
是的。 ////////// – user7854212 2010-09-02 15:55:28