有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

将列表转换为数组。JAVAlang.ArrayStoreException

有一份清单:

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

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

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) 个答案

  1. # 1 楼答案

    试一试(假设您确实有您在评论中提到的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. # 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));
    
  3. # 3 楼答案

    如果你有

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

    如果其中只有一个数组,则可以执行以下操作

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

    null从不导致new Integer[]的ArrayStoreException

  4. # 4 楼答案

    你确定你就是这么做的吗。我已经尝试过此代码,但效果很好:

    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,空,1”

    但是,如果在“for循环”中我将“Integer I”更改为“int I”,则自动装箱将失败,并在null元素上出现NullPointerException

    只要在整数对象(而不是int原语)上创建一个数组,并将该数组的元素视为整数对象(而不是执行会触发自动装箱/取消装箱的操作),就应该可以了

    否则,在将列表转换为数组之前,只需手动删除列表中的所有空值