将列表转换为数组。 java.lang.ArrayStoreException

时间:2012-01-13 10:35:09

标签: java list multidimensional-array

有一个清单:

List<Integer[]> myList = new ArrayList<Integer[]>();

它包含一个sigle条目,但可能包含多个条目:

myList = [[2,null,1,null,null,3,6,1,1]]

我需要将此列表转换为数组Integer[][],但转换因空值而失败:

Integer[] myArr = myList.toArray(new Integer[myList.size()]);

如何解决这个问题?

修改#1

我需要得到:

myArr = [2,null,1,null,null,3,6,1,1]

4 个答案:

答案 0 :(得分:11)

试试这个(假设您在评论中实际上已经谈到了List<Integer[]>):

List<Integer[]> myList = new ArrayList<Integer[]>();
myList.add(new Integer[] {2,null,1,null,null,3,6,1,1} );

Integer[][] myArr = myList.toArray(new Integer[myList.size()][]);

如果将数组列表转换为数组,则会得到一个二维数组,因此您的参数也应该是一个。

答案 1 :(得分:2)

为我工作

    List<Integer[]> myList = new ArrayList<Integer[]>();

    Integer[] ia = {2,null,1,null,null,3,6,1,1};

    myList.add(ia);

    Integer[][] iaa = myList.toArray(new Integer[myList.size()][]);

    System.out.println(Arrays.deepToString(iaa));

答案 2 :(得分:1)

如果你有

List<Integer[]> myList = new ArrayList<Integer[]>();

只有一个数组,你可以做

Integer[] myArr = myList.get(0);

null永远不会导致new Integer[]

的ArrayStoreException

答案 3 :(得分:1)

你确定这就是你在做什么。我已经尝试过这段代码并且工作正常:

List<Integer> myList = new ArrayList<Integer>();
        myList.add(2);
        myList.add(null);
        myList.add(1);      
        Integer[] myArr = myList.toArray(new Integer[myList.size()]);

        for(Integer i:myArr) {
            System.out.println(i);
        }

显示“2,null,1”。

但是,如果在“for循环”中我将“Integer i”更改为“int i”,则自动装箱会因null元素上的NullPointerException而失败。

只要你在Integer对象(而不是int基元)上创建一个数组,并将该数组的元素视为Integer对象(不会做一些会触发自动装箱/拆箱的东西),你应该没问题。

否则,您只需在将其转换为数组

之前手动删除列表中的所有空值