8

How is the best (efficient and simple) way to convert the values of a Map<Object1, List<Object2>> to a List<Object2>. Should I simply iterate over all entries and adAll the items to a list?

Stefan Zobel
  • 3,182
  • 7
  • 28
  • 38
dinhokz
  • 895
  • 15
  • 36

3 Answers3

20

Here's a third way so you don't need to create an ArrayList, which is what you actually asked. This is the proper way to use streams because you're not changing the state of any object.

List<Object2> values = myMap.values()
                            .stream()
                            .flatMap(Collection::stream)
                            .collect(Collectors.toList());
Nick Ziebert
  • 1,258
  • 1
  • 9
  • 17
0

Just found it:

 List<Object2> list = myMap.values()
                           .stream()
                           .flatMap(item -> item.stream())
                           .collect(Collectors.toList()));
dinhokz
  • 895
  • 15
  • 36
0

One option using addAll.

List<Object2> list = new ArrayList<>();
myMap.values().forEach(list::addAll);
Jon
  • 5,247
  • 6
  • 30
  • 38