将 int 原始数组转换为 Java 中的 ArrayList:"java.lang.ClassCastException: [I cannot be cast to java.lang.Integer"

Converting primitive array of int into ArrayList in Java: "java.lang.ClassCastException: [I cannot be cast to java.lang.Integer"

我想知道如何将原始整数数组转换为整数列表?

没有编译错误:

    int[] nums = {0, 1};
    List<Integer> list = new ArrayList(Arrays.asList(nums));
    list.get(0);

但是这个:

    int[] nums = {0, 1};
    List<Integer> list = new ArrayList(Arrays.asList(nums));
    int a = list.get(0);

失败:

java.lang.ClassCastException: class [I cannot be cast to class java.lang.Integer ([I and java.lang.Integer are in module java.base of loader 'bootstrap') 

解决方案 1:

在Java 8:

List<Integer> list = Arrays.stream(nums).boxed().collect(Collectors.toCollection(ArrayList::new));

注意:您可能需要:

import java.util.stream.Collectors;

解决方案 2:

使用for循环:

List<Integer> list = new ArrayList();
for(int n : nums) {
    list.add(n);
}

解决方案 3:

将原始数组声明为 Ingeger[] 而不是 int[]:

Integer[] nums = {0, 1};

代码 Arrays.asList(nums) 不会转换为具有 2 个值的 ArrayList,即。 1 和 2。它只有一个值,int[] { 1, 2 }。为了创建正确的ArrayList,你应该使用

List<Integer> list = Arrays.stream(nums).boxed().collect(Collectors.toList());