我想知道如何将原始整数数组转换为整数列表?
没有编译错误:
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')
在 Java 8 中:
List<Integer> list = Arrays.stream(nums)
.boxed()
.collect(Collectors.toCollection(ArrayList::new));
在 Java 16 及更高版本中:
List<Integer> list = Arrays.stream(nums).boxed().toList();
注意:您可能需要:
import java.util.stream.Collectors;
使用for循环:
List<Integer> list = new ArrayList();
for(int n : nums) {
list.add(n);
}
将原始数组声明为
Integer[]
而不是 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());
在第二个片段中,您尝试将类型
int
分配给 Integer
类型。
自动装箱仅发生在单个元素上(例如 int 到 Integer 的一个元素)。
因此
Arrays.asList()
不能用于将所有元素从int
转换为Integer
。
参考[链接][1]