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

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

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

List<Integer> x =  new ArrayList<Integer>();
int[] n = (int[])x.toArray(int[x.size()]);


MM们
浏览 479回答 3
3回答

千巷猫影

你可以转换,但我不认为有什么可以自动完成的:public&nbsp;static&nbsp;int[]&nbsp;convertIntegers(List<Integer>&nbsp;integers){ &nbsp;&nbsp;&nbsp;&nbsp;int[]&nbsp;ret&nbsp;=&nbsp;new&nbsp;int[integers.size()]; &nbsp;&nbsp;&nbsp;&nbsp;for&nbsp;(int&nbsp;i=0;&nbsp;i&nbsp;<&nbsp;ret.length;&nbsp;i++) &nbsp;&nbsp;&nbsp;&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ret[i]&nbsp;=&nbsp;integers.get(i).intValue(); &nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;ret;}(请注意,这将引发NullPointerException,如果integers或者它中的任何元素都是null.)编辑:根据注释,您可能希望使用列表迭代器来避免使用列表(如LinkedList:public&nbsp;static&nbsp;int[]&nbsp;convertIntegers(List<Integer>&nbsp;integers){ &nbsp;&nbsp;&nbsp;&nbsp;int[]&nbsp;ret&nbsp;=&nbsp;new&nbsp;int[integers.size()]; &nbsp;&nbsp;&nbsp;&nbsp;Iterator<Integer>&nbsp;iterator&nbsp;=&nbsp;integers.iterator(); &nbsp;&nbsp;&nbsp;&nbsp;for&nbsp;(int&nbsp;i&nbsp;=&nbsp;0;&nbsp;i&nbsp;<&nbsp;ret.length;&nbsp;i++) &nbsp;&nbsp;&nbsp;&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ret[i]&nbsp;=&nbsp;iterator.next().intValue(); &nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;ret;}

HUX布斯

如果你用爪哇-8还有另外一种方法。int[]&nbsp;arr&nbsp;=&nbsp;list.stream().mapToInt(i&nbsp;->&nbsp;i).toArray();它所做的是:得到一个Stream<Integer>从名单上获得IntStream通过将每个元素映射到自身(标识函数),将int每个人持有的价值Integer对象(自Java 5以来自动完成)的数组int打电话toArray您也可以显式地调用intValue通过方法参考,即:int[]&nbsp;arr&nbsp;=&nbsp;list.stream().mapToInt(Integer::intValue).toArray();还值得一提的是,你可以得到一个NullPointerException如果你有null列表中的参考。通过向流管道添加过滤条件可以很容易地避免这种情况,如下所示:&nbsp;//.filter(Objects::nonNull)&nbsp;also&nbsp;worksint[]&nbsp;arr&nbsp;=&nbsp;list.stream().filter(i&nbsp;->&nbsp;i&nbsp;!=&nbsp;null).mapToInt(i&nbsp;->&nbsp;i).toArray();例子:List<Integer>&nbsp;list&nbsp;=&nbsp;Arrays.asList(1,&nbsp;2,&nbsp;3,&nbsp;4);int[]&nbsp;arr&nbsp;=&nbsp;list.stream().mapToInt(i&nbsp;->&nbsp;i).toArray();&nbsp;//[1,&nbsp;2,&nbsp;3,&nbsp;4]list.set(1,&nbsp;null);&nbsp; //[1,&nbsp;null,&nbsp;3,&nbsp;4]arr&nbsp;=&nbsp;list.stream().filter(i&nbsp;->&nbsp;i&nbsp;!=&nbsp;null).mapToInt(i&nbsp;->&nbsp;i).toArray();&nbsp;//[1,&nbsp;3,&nbsp;4]

侃侃无极

ApacheCommons有一个ArrayUtils类,它有一个用于Primitive()的方法,它就是这样做的。import&nbsp;org.apache.commons.lang.ArrayUtils;... &nbsp;&nbsp;&nbsp;&nbsp;List<Integer>&nbsp;list&nbsp;=&nbsp;new&nbsp;ArrayList<Integer>(); &nbsp;&nbsp;&nbsp;&nbsp;list.add(new&nbsp;Integer(1)); &nbsp;&nbsp;&nbsp;&nbsp;list.add(new&nbsp;Integer(2)); &nbsp;&nbsp;&nbsp;&nbsp;int[]&nbsp;intArray&nbsp;=&nbsp;ArrayUtils.toPrimitive(list.toArray(new&nbsp;Integer[0]));但是,正如Jon所展示的,独立完成这个任务非常容易,而不是使用外部库。
打开App,查看更多内容
随时随地看视频慕课网APP