2017-10-04 2 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 ++; 
} 

Le code initialise au-dessus d'un ArrayList<ArrayList<ArrayList<String>>> avec certaines valeurs. puis essaie de placer son contenu dans un tableau de chaînes en trois dimensions. (String [][][]). Le code génère l'exception suivante:Got ArrayStoreException lors d'une tentative d'instancier un tableau multidimensionnel (tableau 3D)

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

Veuillez nous aviser.

+0

'new String [resultList.size()] [] []' est votre problème. Les deux dernières parenthèses sont vides, et ont donc une longueur de '0' et ne peuvent rien stocker. – Gendarme

Répondre

0

Brisons it up:

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

Selon sa définition, nestedList est un ArrayList<ArrayList<String>>. Par conséquent, nestedList.stream() est un flux de ArrayList<String>.

Et .map(List::toArray) applique la méthode toArray() sur chaque ArrayList<String> pour le transformer en un flux de Object[] tableaux. Il y a votre problème. Vous utilisez la méthode toArray() sans arguments, ce qui renvoie un tableau d'objets au lieu d'un tableau String. Vous devez à la place utiliser la méthode toArray(String[]).

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