2017-10-04 84 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()]))