将整数对象的 ArrayList 转换为 int 数组? [复制]
Posted
技术标签:
【中文标题】将整数对象的 ArrayList 转换为 int 数组? [复制]【英文标题】:Convert ArrayList of Integer Objects to an int array? [duplicate] 【发布时间】:2012-10-17 10:18:24 【问题描述】:可能重复:How to convert an ArrayList containing Integers to primitive int array?
我尝试了下面的代码,但它不起作用。我是否必须循环将ArrayList
复制到数组中?
int[]intArray = (int[]) integerArrayList.toArray();
【问题讨论】:
使用流:nums.stream().mapToInt(x -> x).toArray();
【参考方案1】:
如果你想要 primitive 类型的数组,你可以使用Apache Commons
ArrayUtils#toPrimitive
方法从包装数组中获取原始数组:-
public static int[] toPrimitive(Integer[] array)
你可以这样使用它:-
int[] arr = ArrayUtils.toPrimitive((Integer[])integerArrayList.toArray());
或者,您可以使用 toArray 方法的 1-arg 版本,它采用 array 并仅返回该类型的数组.这样,您就不必进行类型转换。
List<Integer> myList = new ArrayList<Integer>();
Integer[] wrapperArr = myList.toArray(new Integer[myList.size()]);
// If you want a `primitive` type array
int[] arr = ArrayUtils.toPrimitive(wrapperArr);
但是,如果您对wrapper type
数组表示满意(这肯定不会给您带来麻烦),那么您不需要执行最后一步。
此外,您还可以创建 原始 数组,而无需创建中间 包装器类型 数组。为此,您必须通过loop
写它:-
int[] arr = new int[myList.size()];
for(int i = 0; i < myList.size(); i++)
if (myList.get(i) != null)
arr[i] = myList.get(i);
【讨论】:
It does the same
。循环数组并创建新的原始数组。而且为这样一个简单的功能添加另一个库是没有意义的。
@AmitD。至少让我们免于编写那个循环来完成工作。【参考方案2】:
您需要遍历并复制它。
int[] intArray = new int[integerArrayList.size()];
for (int i = 0; i < intArray.length; i++)
intArray[i] = integerArrayList.get(i);
【讨论】:
【参考方案3】:您不需要循环,也不需要类型转换为int
。只需将int
的声明更改为Integer
。如果需要,其他代码将使用自动拆箱到int
元素。
看autoboxing
// List adapter for primitive int array public static List<Integer> asList(final int[] a) return new AbstractList<Integer>() public Integer get(int i) return a[i]; // Throws NullPointerException if val == null public Integer set(int i, Integer val) Integer oldVal = a[i]; a[i] = val; return oldVal; public int size() return a.length; ;
【讨论】:
【参考方案4】:您应该使用 arraylist 的 toArray(T[] arr)
方法而不是 arrayList 的 toArray()
没有参数。
参考那个方法签名here。
如下所示:
ArrayList<Integer> al = new ArrayList<>();
al.add(2);
al.add(3);
Integer[] arr = al.toArray(new Integer[al.size()]);
System.out.println(arr.length);//returns 2
【讨论】:
这是不正确的,因为他希望创建一个原始 int 数组,而不是另一个 Integer 数组。以上是关于将整数对象的 ArrayList 转换为 int 数组? [复制]的主要内容,如果未能解决你的问题,请参考以下文章
将 ArrayList<Integer> 转换为 int[] 的最快方法 [重复]