问题
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<>();
Now I want to create a new list which contains all the values in superList
.
Here result should contain a1,a2,b1,b2,c1,c2
回答1:
Try like this using flatMap
:
List<List<Object>> list =
List<Object> lst = list.stream()
.flatMap(x -> x.stream())
.collect(Collectors.toList());
回答2:
If you're on Java < 8 (and cannot use Stream
s), you can do this in a one-liner with Guava's Iterables.concat:
List<String> merged = Lists.newArrayList(Iterables.concat(superList));
回答3:
superlist.forEach(e -> result.addAll(e));
Now after some reasarch, I found this way.
回答4:
You would have to loop through every List
in your superlist
object in order to get all of the contents. You can use the addAll()
method to copy each list's contents to your new List
:
List<String> result = new ArrayList<String>();
for (List<String> list : superlist) {
result.addAll(list);
}
来源:https://stackoverflow.com/questions/29635193/convert-list-of-list-into-list-in-java