2017-10-04 81 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>>>。然後嘗試將其內容放入三維字符串數組中(String [][][])。代碼產生以下異常:嘗試實例化多維數組(3D數組)時出現ArrayStoreException

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

請指教。

+0

'new String [resultList.size()] [] []'是你的問題。最後兩個括號是空的,因此長度爲'0',不能存儲任何內容。 – Gendarme

回答

0

讓我們把它分解:

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

按照其定義,nestedListArrayList<ArrayList<String>>。因此,nestedList.stream()是流的ArrayList<String>

.map(List::toArray)在每個ArrayList<String>上應用toArray()方法將其變爲Object[]陣列流。這是你的問題。您正在使用不帶參數的toArray()方法,該方法返回Object數組而不是String數組。您需要改爲使用toArray(String[])方法。

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