java - 连接两个数组 Stream 时出现 ArrayStoreException

标签 java java-8

我在关注这个 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/

相关文章:

java - 如何为 Map of Sets 的 Java Map 声明 TypeScript 类型?

java - 用于实现 Trie 的最佳开源内存 Java 应用程序

Java:在迭代可迭代对象时更改其属性

Android 中的 java.lang.NullPointerException 错误

java - JMapViewer,获取OSM map 比例尺,Java

Hadoop IOException 登录失败

java - 如何在 Java 8 中将 Map<String, List<String>> 转换为 Map<String, String>

java - 并行流是否可以在不同的操作下正常工作?

java - 为什么导入 java.util.* 不足以导入流?

java - 一元函数接口(interface)中的 HashMap 与 Java 8 中的 Lambda