Java Stream将具有列表值的Map转换为一个大列表

问题描述

我有这样的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

如何从中取出List<Integer> allnumbers = //?

1,3,4,6,7,9

包含display: flex,flex-direction,align-items: flex-end,margin-bottom: 0px个元素。

解决方法

您可以流式传输值并使用flatMap()创建一个流,该流是每个List的流的串联:

List<Integer> allnumbers = numbersMap.values().stream()
   .flatMap(List::stream) // secret sauce
   .collect(toList());
,

使用flatMap合并每个列表的流:

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);

输出为:

[1,3,4,6,7,9]