How to Flatten a List of Lists in Java
Suppose we have a list of lists in Java that we want to flatten.
A nested list might look like this.
[[1,2,3],[4,5,6],[7,8,9]]
We’d like to flatten the list like so:
[1,2,3,4,5,6,7,8,9]
In Java, a nested list would be represented as a List<List<Integer>>
while a flattened list would be a List<Integer>
.
Flatten list with Stream’s flatMap()
We can convert the list of lists into a flat list using flatMap()
from the Stream API.
Given a nested list:
List<List<Integer>> listOfLists =
Collections.singletonList(Arrays.asList(1,2,3));
We can easily flatten into a single list.
List<Integer> flatList =
listOfLists.stream()
.flatMap(List::stream)
.collect(Collectors.toList());
Flatten list with Stream’s collect()
We can avoid flatMap()
altogether by performing the aggregation in collect()
.
List<Integer> flatList =
listOfLists.stream()
.collect(ArrayList::new, List::addAll, List::addAll);
Flatten list without Stream API
We can also avoid the Stream API to avoid creating Stream
objects for the elements and the result.
List<Integer> flatList = new ArrayList<>();
listOfLists.forEach(flatList::addAll);
For each list in the nested list, we’ll add all the elements into the flatList
. This is a concise solution that avoids the Stream API altogether.