【问题标题】:Convert list to array. java.lang.ArrayStoreException将列表转换为数组。 java.lang.ArrayStoreException
【发布时间】:2012-02-09 13:45:39
【问题描述】:

有一个清单:

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]

【问题讨论】:

  • 当你的myList 被声明为只是一个整数列表时,你怎么能有一个二维列表(myList = [[2,null,1,null,null,3,6,1,1]] )?
  • 是的,对不起。我的错。应该有 List.
  • 重新编辑#1,这是一维数组?
  • @KlausosKlausos 你是在编辑问题还是我应该这样做?
  • 嗯,可能有,例如:myList = [[2,null,1,null],[null,3,1,null]]。然后我需要得到:myArr = [[2,null,1,null],[null,3,1,null]].

标签: java list multidimensional-array


【解决方案1】:

为我工作

    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】:

    试试这个(假设你实际上有你在评论中提到的List&lt;Integer[]&gt;):

    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()][]);
    

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

    【讨论】:

      【解决方案3】:

      你确定这就是你正在做的事情吗?我试过这段代码,它工作正常:

      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 对象(不执行会触发自动装箱/拆箱的操作),您应该没问题。

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

      【讨论】:

        【解决方案4】:

        如果你有

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

        只有一个数组,你可以这样做

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

        null 永远不会导致 new Integer[] 的 ArrayStoreException

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2013-02-13
          • 2011-11-26
          • 1970-01-01
          • 2018-01-06
          相关资源
          最近更新 更多