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

新手上路,请多包涵

我看到了这个问题: Create ArrayList from array

但是,当我使用以下代码尝试该解决方案时,它并不适用于所有情况:

 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)); 不应该编译得很好吗?

原文由 tuxdna 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 542
2 个回答

问题在

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

int[] 被视为单个 Object 实例,因为原始数组从 Object 扩展。如果您有 Integer[] 而不是 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);
}

原文由 Luiggi Mendoza 发布,翻译遵循 CC BY-SA 3.0 许可协议

使用 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);

原文由 max 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题