结束大小%d小于固定大小%d

  • 本文关键字:小于 结束 java
  • 更新时间 :
  • 英文 :


我使用Java8 steam和CompletableFuture请求方法来获取返回值,是什么导致了此异常?我现在无法复制这个例外:

异常堆栈

java.lang.IllegalStateException
at java.util.stream.Nodes$FixedNodeBuilder.end(Nodes.java:1232)
at java.util.stream.Sink$ChainedReference.end(Sink.java:258)
at java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:483)
at java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:472)
at java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:546)
at java.util.stream.AbstractPipeline.evaluateToArrayNode(AbstractPipeline.java:260)
at java.util.stream.ReferencePipeline.toArray(ReferencePipeline.java:438)
//This line is my code
at com.xxx.XxxxServiceImpl.getDetail(XxxxServiceImpl.java:222)

末端尺寸1小于固定尺寸2

public static void main(String[] args) {
ExecutorService executors = Executors.newFixedThreadPool(10);
List<Integer> list = Lists.newArrayList(1, 2);
Map<Integer, Long> map = new ConcurrentHashMap<>();
CompletableFuture.allOf(list.stream().map(obj -> CompletableFuture.supplyAsync(
() -> getValue(), executors)
.whenComplete((value, ex) -> {

if (ex != null) {
throw new BusinessException("exception" + ex);
} else {
map.put(obj, value);
}
})).toArray(CompletableFuture[]::new)).join();
}
static Long getValue(){
return System.currentTimeMillis();
}

类似的问题,但我没有修改这个地图并删除列表Java 8流:Java.lang.IollegalStateException:结束大小84758小于固定大小84764

类似的问题,但我没有修改这个映射并删除列表Java 8流:Java.lang.IllegalStateException:结束大小84758小于固定大小84764

好的,下面是您处理这个问题的方法。。。

为了使代码具有一定的稳定性,您需要隔离这段复杂的逻辑并通过测试来覆盖它。这将使隔离和重现问题变得更加容易。

出现此错误的原因是流中的某些元素可能引发异常,并且输出的大小小于输入的大小。

暂时尝试删除异常代码,看看它是否有效。如果它没有在评论中发布结果。

我也遇到了类似的问题。我发现我将HashSetparallelStream()结合使用。由于HashSet不是线程安全的,我用ConcurrentHashMap.newKeySet()替换了它,从而解决了问题。

最新更新