gpt4 book ai didi

Java 流 : limit doesnt work with Random(). ints().sorted()

转载 作者:行者123 更新时间:2023-12-05 09:01:56 24 4
gpt4 key购买 nike

我有以下代码:

new Random().ints()
.map(i -> i / 2)
.limit(100)
.toArray()

...它按预期工作。

但这行不通:

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 个元素?

最佳答案

调用 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。此外,后一种方法比前一种方法更简洁。

关于Java 流 : limit doesnt work with Random(). ints().sorted(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/72505128/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com