从回答这个问题 https://stackoverflow.com/q/49760006/7294647,我遇到了一个奇怪的功能。以下代码按照我的预期工作(现有数组中的前两个值将被覆盖):
Integer[] newArray = Stream.of(7, 8)
.parallel()
.toArray(i -> new Integer[] {1, 2, 3, 4, 5, 6});
System.out.println(Arrays.toString(newArray));
Output:
[7, 8, 3, 4, 5, 6]
但是,尝试使用顺序流执行此操作会引发IllegalStateException
:
Integer[] newArray = Stream.of(7, 8)
.toArray(i -> new Integer[] {1, 2, 3, 4, 5, 6});
System.out.println(Arrays.toString(newArray));
Output:
Exception in thread "main" java.lang.IllegalStateException: Begin size 2 is not equal to fixed size 6
at java.base/java.util.stream.Nodes$FixedNodeBuilder.begin(Nodes.java:1222)
at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:483)
at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:474)
at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:550)
at java.base/java.util.stream.AbstractPipeline.evaluateToArrayNode(AbstractPipeline.java:260)
at java.base/java.util.stream.ReferencePipeline.toArray(ReferencePipeline.java:517)
at test/test.Test.main(Test.java:30)
我很好奇为什么顺序流不会像并行流那样覆盖数组的元素。我搜索了一下,但无法找到与此相关的文档,但我认为它存在于某个地方。