如何在Java中从数组(int[])创建ArrayList(ArrayList<Integer>)

2022-09-01 12:35:26

我看到了这个问题:从数组创建数组列表

但是,当我尝试使用以下代码的解决方案时,它并非在所有情况下都有效:

import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collection;
import java.util.List;

public class ToArrayList {

    public static void main(String[] args) {
        // this works
        String[] elements = new String[] { "Ryan", "Julie", "Bob" };
        List<String> list = new ArrayList<String>(Arrays.asList(elements));
        System.out.println(list);

        // this works
        List<Integer> intList = null;
        intList = Arrays.asList(3, 5);
        System.out.println(intList);

        int[] intArray = new int[] { 0, 1 };
        // this doesn't work!
        intList = new ArrayList<Integer>(Arrays.asList(intArray));
        System.out.println(intList);
    }
}

我在这里做错了什么?代码编译不是应该很好吗?intList = new ArrayList<Integer>(Arrays.asList(intArray));


答案 1

问题在

intList = new ArrayList<Integer>(Arrays.asList(intArray));

是被视为单个实例,因为基元数组从 扩展而来。如果您拥有而不是从现在开始发送.int[]ObjectObjectInteger[]int[]Object

Integer[] intArray = new Integer[] { 0, 1 };
//now you're sending a Object array
intList = new ArrayList<Integer>(Arrays.asList(intArray));

从你的评论中:如果你仍然想使用一个(或其他基元类型数组)作为主数据,那么你需要使用包装类创建一个额外的数组。对于此示例:int[]

int[] intArray = new int[] { 0, 1 };
Integer[] integerArray = new Integer[intArray.length];
int i = 0;
for(int intValue : intArray) {
    integerArray[i++] = intValue;
}
intList = new ArrayList<Integer>(Arrays.asList(integerArray));

但是,由于您已经在使用循环,因此我不介意使用临时包装器类数组,只需将项目直接添加到列表中即可:for

int[] intArray = new int[] { 0, 1 };
intList = new ArrayList<Integer>();
for(int intValue : intArray) {
    intList.add(intValue);
}

答案 2

使用Java 8,您可以在一行中完成:

        
int[] intArr = { 1, 1, 2, 3, 5, 8, 11};  
List<Integer> list = Arrays.stream(intArr).boxed().collect(Collectors.toList());  
list.forEach(System.out::println);