2012-01-13 94 views
15

有一个列表:将列表转换为数组。 java.lang.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] 
+3

你怎么能有一个二维表('myList中= [[2,空,1,NULL,NULL,3,6,1,1] ')当你的'myList'被声明为只是一个整数列表? – adarshr 2012-01-13 10:37:39

+0

是的,对不起。我的错。应该有列表。 – 2012-01-13 10:39:06

+1

重新编辑#1,这是一个一维数组? – 2012-01-13 10:39:11

回答

10

之前试试这个(假设你有真正的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维数组,因此您的参数也应该是1。

1

如果你有

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

与中只有一个数组,你可以做

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

null绝不会导致ArrayStoreException异常new Integer[]

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对象(不做一些会触发autoboxing/unboxing的事情),你应该没问题。

否则,你就必须手动删除列表中的所有空它转向到一个数组

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