我有以下代码:

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

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

Java相关问答推荐

计算战舰沉船/船只的问题(Java)

Java 8 RDX-如何设置单个选项卡标题文本的 colored颜色

JPackage-results已安装-如何添加系统属性?

日食IDE 2024-03在Ubuntu下崩溃,导致hr_err_pid.log

当一个链表中间有一个循环时,它的松散部分会发生什么?

使用Java Streams API比较两个不同的Java集合对象和一个公共属性

有没有一种方法使保持活动设置专用于java.net.http.HttpClient的一个实例

';com.itextpdf.ext.html.WebColors已弃用

如何对多个字段进行分组和排序?

Spring Security不允许加载js

如何在Cosmos DB(Java SDK)中增加默认响应大小

Regex以查找不包含捕获组的行

Spring Boot中的应用程序.properties文件中未使用的属性

如何在盒子的顶部和底部创建两张不同图片(大小相同)的盒子?

如何生成指定范围内的11位序列号?

我该如何为我的类编写getter和setter方法?

Bash数组的单引号元素并使用空格连接

获取401未经授权,即使在标头中设置了浏览器名称和cookie

如何使用我的RLE程序解决此问题

java.util.LinkedList()是如何成为MutableList的实例的?