我在关注这个 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并相信我的问题由流组成,它们是不兼容的类型,这就是为什么它们没有被存储,所以两个问题是不同的。
最佳答案
Stream.of
将输入数组视为单个元素。请改用 Arrays.stream()
。
int[] c = {1, 34};
int[] d = {3, 1, 5};
int[] res= Stream.of(c, d)
.flatMapToInt(Arrays::stream)
.toArray();
for (int re : res) {
System.out.println(re);
}
结果:
1
34
3
1
5
如果您想装箱,请选择:
Integer[] res= Stream.of(c, d)
.flatMapToInt(Arrays::stream).boxed()
.toArray(Integer[]::new);
关于java - 连接两个数组 Stream 时出现 ArrayStoreException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54881053/