如何将包含整数的ArrayList转换为原始整数数组?

我试图用下面的代码将包含整数对象的ArrayList转换为原语int[],但它会引发编译时错误。可以用Java进行转换吗

列表<整数>x=新阵列列表<整数>();
int[]n=(int[])x.toArray(int[x.size());

如果您使用的是java-8还有另一种方法

int[]arr=list.stream().mapToInt(i->i).toArray();

它所做的是:

  • 获取流<整数&gt从列表中删除
  • 通过将每个元素映射到自身(标识函数),取消绑定每个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]

发表评论