简化地图值列表的最佳简洁方法?

时间:2018-10-05 11:59:40

标签: java lambda java-8 java-stream

我有一个这样的地图列表:

List<Map<String,Object>> l = new ArrayList<>();
Map<String,Integer> m = new HashMap<>();
m.put("X", 1);
m.put("Y", 9);
l.add(m);
m = new HashMap<>();
m.put("X", 23);
m.put("Y", 6);
l.add(m);

用lambda基元线性化所有地图值以获得类似列表的最佳方法是什么

List<Integer> = [1, 9, 23, 6]

2 个答案:

答案 0 :(得分:3)

尝试:

List<Integer> result = l
        .stream()
        .flatMap(map -> map.values().stream())
        .collect(Collectors.toList());

System.out.println(result); // [1, 9, 23, 6]

答案 1 :(得分:2)

此外,您可以不使用流(但使用lambda)来做到这一点:

List<Integer> result = new ArrayList<>();
yourListOfMaps.forEach(map -> result.addAll(map.values());

地图列表应为List<Map<String, Integer>>类型。