gpt4 book ai didi

Java 8 流 : java. lang.IllegalStateException:结束大小 84758 小于固定大小 84764

转载 作者:行者123 更新时间:2023-11-30 07:40:39 24 4
gpt4 key购买 nike

我正在使用 Java 8 streams API 将映射值转换为数组。我收到以下异常:

Unhandled exception ScheduledExecutorService : java.lang.IllegalStateException: End size 84758 is less than fixed size 84764
at java.util.stream.Nodes$FixedNodeBuilder.end(Nodes.java:1232)
at java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:482)
at java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:471)
at java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:545)
at java.util.stream.AbstractPipeline.evaluateToArrayNode(AbstractPipeline.java:260)
at java.util.stream.ReferencePipeline.toArray(ReferencePipeline.java:438)
at com.turnoutnow.businesslogic.Worker.generateVisitsToESAndS3(Worker.java:213)

我正在 Google 上搜索异常,但没有找到任何关于该错误的有用信息。谁能告诉我这个错误的确切原因是什么?

编辑

这是一行代码:

visits.getVisitDataMap().values().stream().toArray(n -> new VisitDataBE[n]);

最佳答案

您当前的代码是正确的,因为您正在创建大小合适的数组。您可以将其简化为 .toArray(VisitDataBE[]::new)

很可能在 toArray() 运行时,其他线程正在从 visits.getVisitDataMap() 映射中删除元素。您可以通过创建 Map 的防御副本来检验这个假设:

Map<...> copy = new HashMap<>(visits.getVisitDataMap());
copy.values().stream().toArray(n -> new VisitDataBE[n]);

正确的修复取决于您的应用程序的多线程语义。

关于Java 8 流 : java. lang.IllegalStateException:结束大小 84758 小于固定大小 84764,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57274369/

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