2015-04-14 14 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>(); 

Jetzt möchte ich eine neue Liste erstellen, die alle Werte in superList enthält. führen hier a1,a2,b1,b2,c1,c2Liste der Liste in Liste in Java konvertieren

+0

haben Sie einen Versuch gemacht, diese auf eigene Faust zu tun ? ein paar foreach-schleifen sollten das gut machen. –

+0

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

Antwort

11

Versuchen Sie, wie diese flatMap mit:

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

enthalten sollten Sie eine Schleife jeder durch List in Ihrem superlist Objekt, um den gesamten Inhalt zu bekommen hätte. Sie können die addAll() Methode verwenden, um jede Liste der Inhalte auf Ihren neuen List zu kopieren:

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

nun nach einiger reasarch, fand ich diese Art und Weise.

+0

Welches ist die beste Methode für die Frage in Bezug auf die Leistung –

5

Wenn Sie auf Java < 8 (und nicht Stream s nutzen können), können Sie dies in einem Einzeiler mit Guava der Iterables.concat:

List<String> merged = Lists.newArrayList(Iterables.concat(superList)); 
Verwandte Themen