2015-04-14 6 views
5
List<List<String>> superlist = new ArrayList<List<String>>(); 

    List<String> list1 = new ArrayList<String>(); 
    list1.add("a1"); 
    list1.add("a2"); 

    List<String> list2 = new ArrayList<String>(); 
    list2.add("b1"); 
    list2.add("b2"); 

    List<String> list3= new ArrayList<String>(); 
    list3.add("c1"); 
    list3.add("c2"); 


    superlist.add(list1); 
    superlist.add(list2); 
    superlist.add(list3); 

    List<String> result= new ArrayList<String>(); 

Ora voglio creare un nuovo elenco che contenga tutti i valori in superList. Qui risultato dovrebbe contenere a1,a2,b1,b2,c1,c2Convertire l'elenco di un elenco nell'elenco in java

+0

Avete fatto un tentativo di fare questo da soli ? un paio di cicli foreach dovrebbero fare il lavoro perfettamente bene. –

+0

http://stackoverflow.com/questions/25147094/turn-a-list-of-lists-into-a-list-using-lambdas – coderz

risposta

11

Prova in questo modo utilizzando flatMap:

List<List<Object>> list = 
List<Object> lst = list.stream() 
     .flatMap(x -> x.stream()) 
     .collect(Collectors.toList()); 
2

che avrebbe dovuto collegare attraverso ogni List nel vostro superlist oggetto al fine di ottenere tutti i contenuti. È possibile utilizzare il metodo addAll() copiare il contenuto di ciascuna lista per il vostro nuovo List:

List<String> result = new ArrayList<String>(); 
for (List<String> list : superlist) { 
    result.addAll(list); 
} 
2
superlist.forEach(e -> result.addAll(e)); 

Ora dopo qualche reasarch, ho trovato in questo modo.

+0

Qual è il metodo migliore per la domanda in termini di prestazioni –

5

Se siete su Java < 8 (e non può usare Stream s), si può fare questo in un one-liner con di Guava Iterables.concat:

List<String> merged = Lists.newArrayList(Iterables.concat(superList)); 
Problemi correlati