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
-
have you made an attempt at doing this on your own? a couple of foreach loops should do the job perfectly well.Davis Broda– Davis Broda2015年04月14日 18:53:06 +00:00Commented Apr 14, 2015 at 18:53
-
stackoverflow.com/questions/25147094/…coderz– coderz2016年12月20日 03:45:16 +00:00Commented Dec 20, 2016 at 3:45
5 Answers 5
Try like this using flatMap:
List<List<Object>> list =
List<Object> lst = list.stream()
.flatMap(Collection::stream)
.collect(Collectors.toList());
answered Apr 14, 2015 at 18:56
Rahul Tripathi
173k33 gold badges292 silver badges341 bronze badges
Sign up to request clarification or add additional context in comments.
1 Comment
Marco Martins
I will leave this here in case it helps someone, if instead of
List<List<Object>> you have List<Object[]>, use Arrays::stream instead of Collection::streamIf you're on Java < 8 (and cannot use Streams), you can do this in a one-liner with Guava's Iterables.concat:
List<String> merged = Lists.newArrayList(Iterables.concat(superList));
answered Apr 14, 2015 at 19:37
Mick Mnemonic
7,9562 gold badges29 silver badges35 bronze badges
Comments
superlist.forEach(e -> result.addAll(e));
Now after some reasarch, I found this way.
answered Apr 14, 2015 at 19:23
Manu Joy
1,7896 gold badges19 silver badges30 bronze badges
2 Comments
Manu Joy
Which is the best method for the question in terms of performance
F. Müller
Actually, a plain for-loop would be even faster since iterators tend to consume quite a bit of memory if you use them all over the place. But most of the time performance is not even an issue, especially nowadays. I just noticed that this answer was posted almost 6 years ago.
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);
}
answered Apr 14, 2015 at 18:53
camelsaucerer
3013 silver badges12 bronze badges
Comments
This works for me!
List<String> result= new ArrayList<>();
superlist.stream().forEach(
n->result.addAll(n)
);
System.out.println(result);
Comments
lang-java