java8 流 api 抛出不兼容的类型 : Object[] cannot be converted to Integer[] when converting String array to Integer array

标签 java java-8 java-stream

我的以下代码:

String[] valStrs=data.split(";");//data is a string
Integer[] vals=Arrays.stream(valStrs).map(Integer::valueOf).toArray();

正在 throw :

error: incompatible types: Object[] cannot be converted to Integer[] [in Codec.java]
        Integer[] vals=Arrays.stream(valStrs).map(Integer::valueOf).toArray();

我想我正在尝试获得 String流,然后映射 String进入Integer通过 Integer::valueOf ,并收集这些 Integer成一个数组。

那么为什么会出现这个错误呢?快速搜索但找不到答案。


更新:

事实上int[] arr= Arrays.stream(valStrs).mapToInt(Integer::parseInt).toArray();完美运行。

最佳答案

您必须将对整数数组的构造函数引用传递给 toArray像这样。否则它将创建一个 Object[]默认情况下。

Arrays.stream(valStrs).map(Integer::valueOf).toArray(Integer[]::new);

mapToInt创建一个 IntStream , 它是 toArray()函数返回 int[] .这是声明。

int[] toArray();

相反,map(Integer::valueOf)创建一个 Stream<Integer>它是 toArray返回 Object[]除非另有规定。这是实现。

@Override
public final Object[] toArray() {
    return toArray(Object[]::new);
}

调用 toArray(Integer[]::new)将调用此重载方法。

public final <A> A[] toArray(IntFunction<A[]> generator)

这是文档的摘录。

Returns an array containing the elements of this stream, using the provided generator function to allocate the returned array.

generator a function which produces a new array of the desired type and the provided length

关于java8 流 api 抛出不兼容的类型 : Object[] cannot be converted to Integer[] when converting String array to Integer array,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54789016/

相关文章:

Java 包含 vs anyMatch 行为

具有泛型的 Java 流

java - 如何在Java中将二进制小数转换为十六进制?

java - 如何在tomcat中查看输出?

java - 是否可以将 steam 操作的结果发送到另一个函数而不将其收集到另一个变量中

java - 我如何使用流 API 在 Java 8 中映射它?

java - 数组匹配不正确

java - Opengl 在窗口中央绘图

java - 在 Map 上使用多个过滤器并使用 Java 8 不同地处理每个过滤器

java - 如何使用parallelStream处理2个列表