我的以下代码:
String[] valStrs=data.split(";");//data is a string
Integer[] vals=Arrays.stream(valStrs).map(Integer::valueOf).toArray();
抛出:
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();
可以正常工作。
答案 0 :(得分:2)
您必须像这样将构造函数引用传递给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)
这里是文档摘录。
使用,返回包含此流元素的数组。 提供了生成器函数来分配返回的数组。
generator一个产生所需类型的新数组的函数 以及提供的长度