【发布时间】:2019-07-19 17:36:18
【问题描述】:
我正在关注这个Question 并试图获得一种连接两个数组的新方法。
int[] c = {1, 34};
int[] d = {3, 1, 5};
我想出了这个:
Integer [] res= Stream.of(c, d)
.flatMap(Stream::of)
.toArray(Integer[]::new);
上面的编译很好,但我得到了这个异常:
Exception in thread "main" java.lang.ArrayStoreException
at java.lang.System.arraycopy(Native Method)
at java.util.stream.SpinedBuffer.copyInto(SpinedBuffer.java:194)
at java.util.stream.Nodes$SpinedNodeBuilder.copyInto(Nodes.java:1290)
at java.util.stream.SpinedBuffer.asArray(SpinedBuffer.java:215)
at java.util.stream.Nodes$SpinedNodeBuilder.asArray(Nodes.java:1296)
at java.util.stream.ReferencePipeline.toArray(ReferencePipeline.java:439)
我的错误是什么,请给出解释,以便我理解这个概念。
PS:我见过Dealing with an ArrayStoreException 并相信我的问题由流组成,这些流是不可比较的类型,这就是它们没有被存储的原因,所以两个问题是不同的。
【问题讨论】:
-
您的数组是原始数组 (
int[]),而您想将它们连接到包装类数组 (Integer[]::new) - 我想说自动装箱在这里不起作用。 -
我认为您只是误解了解释,因为您刚刚回答了自己的问题。