Convertir une liste nestede en tableau 2D

J’essaie de convertir une liste nestede dans un tableau 2D.

List<List> list = new ArrayList(); list.add(Arrays.asList("a", "b", "c")); list.add(Arrays.asList("dd")); list.add(Arrays.asList("eee", "fff")); 

Je veux en faire une Ssortingng[][] . J’ai essayé ce qui suit:

 Ssortingng[][] array = (Ssortingng[][]) list.toArray(); // ClassCastException Ssortingng[][] array = list.toArray(new Ssortingng[3][3]); // ArrayStoreException Ssortingng[][] array = (Ssortingng[][]) list.stream() // ClassCastException .map(sublist -> (Ssortingng[]) sublist.toArray()).toArray(); 

Y a-t-il un moyen qui fonctionne? Notez que je ne connaitrai pas la taille de la liste avant l’exécution, et elle pourrait être irrégulière.

Il n’existe pas de méthode simple permettant de faire ce que vous voulez car votre toArray ne peut renvoyer qu’un tableau d’éléments stockés dans une liste qui, dans votre cas, serait également une liste.

La solution la plus simple serait de créer un tableau à deux dimensions et de le remplir avec les résultats de toArray partir de chacune des listes nestedes.

 Ssortingng[][] array = new Ssortingng[list.size()][]; int i = 0; for (List nestedList : list) { array[i++] = nestedList.toArray(new Ssortingng[nestedList.size()]); } 

(Vous pouvez raccourcir ce code si vous utilisez Java 8 avec des stream, comme Alex l’a fait )

Vous pouvez faire ceci:

 Ssortingng[][] array = list.stream() .map(l -> l.stream().toArray(Ssortingng[]::new)) .toArray(Ssortingng[][]::new); 

Il crée un Stream> partir de votre liste de listes, puis à partir de celui-ci utilise map pour remplacer chacune des listes par un tableau de chaînes qui aboutit à un Stream , puis appelle finalement toArray fonction de générateur, au lieu de la version sans paramètre) sur celle-ci pour produire le Ssortingng[][] .

Un peu plus court que la réponse d’Alex:

 final List> list = ...; final Ssortingng[][] array = list.stream().map(List::toArray).toArray(Ssortingng[][]::new);