Java 流:限制不适用于排序

Java stream: limit doesnt work with sorted

我有以下代码:

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()returns无限的伪随机数流。当您对其进行排序时,它在内部使用一个数组。然而,数组的最大尺寸显然小于∞。要解决此问题,请使用 limit 并首先使您的流有限,然后执行排序。事实上,这优化了流处理管道,因为您只对必要的元素进行排序。这是它的样子。

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