我有以下代码:
new Random().ints()
.map(i -> i / 2)
.limit(100)
.toArray()...and --它的工作方式和预期一样。
但这不管用:
new Random().ints()
.sorted()
.map(i -> i / 2)
.limit(100)
.toArray()它抛出:
Exception in thread "main" java.lang.IllegalArgumentException: Stream size exceeds max array size难道不应该限制流的短路并帮助将其限制为100个元素吗?
发布于 2022-06-05 06:07:37
调用new Random().ints()返回无限的伪随机数流。在对其进行排序时,它内部使用一个数组。但是,数组的最大大小明显小于∞。要解决这个问题,首先使用limit并使流有限,然后执行排序。实际上,这优化了流处理管道,因为您只对必要的元素进行排序。这是看上去的样子。
new Random().ints().limit(100).map(i -> i / 2).sorted().toArray();更新
根据以下评论中的建议,您可以这样进一步改进它。
new Random().ints(100).map(i -> i / 2).sorted().toArray();ints过程生成一个刚好有100个伪随机数的流,这样您就可以不使用limit了。此外,后一种方法比前者略简洁一些。
https://stackoverflow.com/questions/72505128
复制相似问题