2017-10-04 5 views
0
resultList = [[[Computer lessons], [Leon, Maria]], [[Computer repair], [Jack, Leon]], [[Data recovery service], [Leon]], [[Handyman], [Jack]], [[House cleaning], [Jack, Maria]]] 

String[][][] result = new String [resultList.size()][][]; 

int count = 0; 
for(ArrayList<ArrayList<String>> nestedList:resultList) { 

    result[count]= nestedList.stream().map(List::toArray).toArray(String[][]::new); 
    count ++; 
} 

上記のコードは、ArrayList<ArrayList<ArrayList<String>>>をいくつかの値で初期化します。そのコンテンツを3次元文字列配列(String [][][])に入れようとします。コードは次の例外を生成します:多次元配列(3D配列)をインスタンス化しようとするとArrayStoreExceptionが発生する

java.lang.ArrayStoreException: [Ljava.lang.Object; 

助言してください。

+0

'new [resultList.size()] [] []'はあなたの問題です。最後の2つの括弧は空であり、したがって長さが「0」で何も格納することができません。 – Gendarme

答えて

0

は、それを破るのをしてみましょう:その定義に従って

nestedList.stream().map(List::toArray) 

nestedListArrayList<ArrayList<String>>です。

したがって、nestedList.stream()は、ArrayList<String>のストリームです。

.map(List::toArray)は、それぞれArrayList<String>toArray()メソッドを適用して、Object[]のストリームに変換します。あなたの問題があります。引数なしのtoArray()メソッドを使用しています。これは、文字列配列の代わりにObject配列を返します。代わりにtoArray(String[])メソッドを使用する必要があります。

.map(list -> list.toArray(new String[list.size()]))