1

I have a Map like this:

Map<String, List<Integer>> numbersMap = new HashMap<>();
numbersMap.put("A", Arrays.asList(1,2,3));
numbersMap.put("B", Arrays.asList(4,5,6));
numbersMap.put("C", Arrays.asList(7,8, 9));

How do I get a List out of it?

List<Integer> allnumbers = //?

that contains 1, 2, 3, 4, 5, 6, 7, 8, 9 elements.

Stefan Zobel
  • 3,182
  • 7
  • 28
  • 38
parsecer
  • 4,758
  • 13
  • 71
  • 140

2 Answers2

4

You stream the values and use flatMap() to create one stream that is the concatenation of the streams of each List:

List<Integer> allnumbers = numbersMap.values().stream()
   .flatMap(List::stream) // secret sauce
   .collect(toList());
Bohemian
  • 412,405
  • 93
  • 575
  • 722
3

use flatMap to merge each list's stream:

Map<String, List<Integer>> numbersMap = new HashMap<>();
numbersMap.put("A", Arrays.asList(1,2,3));
numbersMap.put("B", Arrays.asList(4,5,6));
numbersMap.put("C", Arrays.asList(7,8, 9));

List<Integer> output = numbersMap.values()
                        .stream()
                        .flatMap(list -> list.stream())
                        .collect(Collectors.toList());
System.out.println(output);

And the output is:

[1, 2, 3, 4, 5, 6, 7, 8, 9]
reyad
  • 1,392
  • 2
  • 7
  • 12