2012-01-13 93 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));