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

20

这里有一个列表:

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

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

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

我需要将这个列表转换为数组 Integer[][],但由于存在null值,转换失败:

Integer[] myArr = myList.toArray(new Integer[myList.size()]);
如何解决这个问题? 编辑#1 我需要得到:
myArr = [2,null,1,null,null,3,6,1,1]

3
当你声明myList为整数列表时,如何创建一个二维数组(`myList = [[2,null,1,null,null,3,6,1,1]])? - adarshr
是的,抱歉。我的错。应该是 List<Integer[]>。 - Klausos Klausos
1
重新编辑#1,那是一个一维数组吗? - Peter Lawrey
@KlausosKlausos,你在编辑问题还是我来做? - adarshr
可能会有这样的情况,例如:myList = [[2,null,1,null],[null,3,1,null]]。然后我需要得到:myArr = [[2,null,1,null],[null,3,1,null]]。 - Klausos Klausos
如果您发布实际代码而不是明显无效的Java代码,那将非常好。 - Stephen C
4个回答

13

假设您实际拥有您在评论中提到的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()][]);
如果你将一个数组列表转换为一个数组,你会得到一个二维数组,因此你的参数也应该是一个。

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

1

如果你有一个

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

只需一个数组,就可以完成以下操作

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

null 对于 new Integer[] 永远不会引起 ArrayStoreException 异常。


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”,自动装箱将在空元素上失败,并抛出NullPointerException异常。

只要您创建了一个整数对象数组(而不是原始的int类型数组),并将该数组的元素视为整数对象(而不是执行触发自动装箱/取消装箱的操作),您就应该没问题了。

否则,您只需在将其转换为数组之前手动删除所有nulls。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接