在Java中将int原始数组转换为ArrayList:“java.lang.ClassCastException:[I无法转换为java.lang.Integer”

问题描述 投票:0回答:3

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

没有编译错误:

    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 arrays arraylist type-conversion converters
3个回答
3
投票

解决方案1:

在 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;

解决方案2:

使用for循环:

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

解决方案3:

将原始数组声明为

Integer[]
而不是
int[]
:

Integer[] nums = {0, 1};

0
投票

代码

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

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


0
投票

在第二个片段中,您尝试将类型

int
分配给
Integer
类型。

自动装箱仅发生在单个元素上(例如 int 到 Integer 的一个元素)。

因此

Arrays.asList()
不能用于将所有元素从
int
转换为
Integer

参考[链接][1]

[1]: https://www.baeldung.com/java-primitive-array-to-list#:~:text=不幸的是%2C%20this%20won%E2%80%99t,to%20Integer%5B %5D)。

© www.soinside.com 2019 - 2024. All rights reserved.