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

Teraz chcę utworzyć nową listę, która zawiera wszystkie wartości w superList. Oto wynik powinien zawierać a1,a2,b1,b2,c1,c2Konwertuj listę list do listy w java

+0

masz podjął próbę w ten sposób na własną rękę ? kilka pętli foreach powinno doskonale wykonywać tę pracę. –

+0

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

Odpowiedz

11

Spróbuj tak użyciu flatMap:

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

Trzeba by pętli każdego List w Twoim obiekcie superlist w celu uzyskania wszystkich treści. Można użyć metody addAll() skopiować zawartość każdej listy do swojego nowego List:

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

Teraz po pewnym reasarch, znalazłem ten sposób.

+0

Która metoda jest najlepsza pod względem wydajności –

5

Jeśli jesteś na Java < 8 (i nie może korzystać Stream s), można to zrobić w ciągu jednego-liner z Guava na Iterables.concat:

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