2012-01-13 3 views
15

가 목록입니다 : 그것은 sigle 항목이 포함목록을 배열로 변환하십시오. java.lang.ArrayStoreException

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

하지만 여러 항목이 포함될 수 있습니다, 내가 배열 Integer[][]에이 목록을 변환해야

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

을하지만, null로 인해 변환이 실패합니다.

Integer[] myArr = myList.toArray(new Integer[myList.size()]); 

이 문제를 해결하는 방법은 무엇입니까?

편집 # 1 내가 얻을 필요가

:

myArr = [2,null,1,null,null,3,6,1,1] 
+3

에 대한 ('으로 myList = [[2, NULL, 1, NULL, NULL, 3,6,1,1]] ') 때 'myList'는 단지 정수리스트로 선언 되었습니까? – adarshr

+0

예, 죄송합니다. 내 잘못. 목록 이 있어야합니다. –

+1

다시 편집 # 1, 1D 배열입니까? –

답변

10

에 켜기 전에 목록에서 모든 널 (null)을 제거해야합니다 :

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

을 당신이 그것을에 하나의 배열을 가진

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"로 변경하면 autoboxing이 null 요소에서 NullPointerException으로 실패합니다.

Integer 객체 (int 프리미티브가 아님)에 배열을 만들고 해당 배열의 요소를 Integer 객체로 취급하는 한 (autoboxing/unboxing을 트리거하는 것이 아니라) 괜찮습니다.

그렇지 않으면, 당신은 수동으로 (당신이 List<Integer[]> 당신이 당신의 의견에 대해 이야기 실제로이 가정) 시도 배열

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)); 
관련 문제