我试图用下面的代码将包含整数对象的ArrayList转换为原语int[],但它会引发编译时错误。可以用Java进行转换吗
列表<;整数>;x=新阵列列表<;整数>;();
int[]n=(int[])x.toArray(int[x.size());
如果您使用的是java-8还有另一种方法
int[]arr=list.stream().mapToInt(i->;i).toArray();
它所做的是:
- 获取
流<;整数>从列表中删除 - 通过将每个元素映射到自身(标识函数),取消绑定每个
Integer对象持有的int值,获得IntStream(自Java 5以来自动完成) - 通过调用
toArray
您还可以通过方法引用显式调用intValue,即:
int[]arr=list.stream().mapToInt(Integer::intValue.toArray();
还值得一提的是,如果列表中有任何null引用,您可能会得到NullPointerException。通过向流管道添加过滤条件,可以很容易地避免这种情况,如下所示:
/.filter(Objects::nonNull)也可以工作
int[]arr=list.stream().filter(i->;i!=null).mapToInt(i->;i).toArray();
例如:
列表<;整数>;list=Arrays.asList(1,2,3,4);
int[]arr=list.stream().mapToInt(i->;i).toArray()//[1, 2, 3, 4]
list.set(1,空)//[1,空,3,4]
arr=list.stream().filter(i->;i!=null).mapToInt(i->;i).toArray()//[1, 3, 4]