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
  • 2,847
  • 7
  • 25
  • 34
parsecer
  • 3,790
  • 9
  • 49
  • 105

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
  • 389,931
  • 88
  • 552
  • 692
2

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,367
  • 2
  • 6
  • 12