2012-01-13 3 views
15

ありリストです:私は配列Integer[][]にこのリストを変換する必要がありリストを配列に変換します。 java.lang.ArrayStoreException

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

、しかし:

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

それはSIGLEエントリが含まれていますが、複数のエントリが含まれる場合がありますヌルによって変換が失敗します。

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

この問題を解決するにはどうすればよいですか?

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

あなたは、2Dのリストを持つことができますどのように( 'ます。myList = [[ヌル2、、1、NULL、NULL、3,6,1,1]] ')あなたの'myList'は単なる整数のリストであると宣言されていますか? – adarshr

+0

はい、申し訳ありません。私のせい。リストがあるはずです。 –

+1

Re Edit#1、それは1Dアレイですか? –

答えて

10

(あなたがあなたのコメントでの話、実際にList<Integer[]>を持っていると仮定して)これを試してみてくださいにそれを回す前に、あなたのリストからすべての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つにする必要があります。

1

あなたはそれで一つだけのアレイと

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

を持っている場合は、あなたが

Integer[] myArr = myList.get(0); 
を行うことができます:私が取得する必要があり

編集#1

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"に変更すると、ヌル要素でNullPointerExceptionが発生してオートボックが失敗します。

整数オブジェクト(intプリミティブではありません)に配列を作成し、その配列の要素を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)); 
関連する問題