如何将地图列表转换为地图

时间:2020-09-18 11:17:39

标签: java java-8 java-11

我有一张地图列表(Map

List<Map<Long, Long>> listMap = List.of(
        Map.of(10L, 11L),
        Map.of(20L, 21L),
        Map.of(30L, 31L));

我想将其转换为Map

Map<Long, Long> newMap = Map.of(
        10L, 11L,
        20L, 21L,
        30L, 31L);

这是我的解决方案-增强了循环功能。

Map<Long, Long> newMap = new HashMap<>();
for (Map<Long, Long> map : listMap) {
    Long key = (Long) map.keySet().toArray()[0];
    newMap.put(key, map.get(key));
}

有没有更好的方法?我可以使用Java流进行这种转换吗?

注意:密钥是唯一的-不能重复。

2 个答案:

答案 0 :(得分:4)

您可以flatMap展平每个地图的列表条目,并使用Collectors.toMap

作为地图收集
Map<Long, Long> newMap = 
    listMap.stream()
           .flatMap(m -> m.entrySet().stream())
           .collect(Collectors.toMap(e -> e.getKey(), e -> e.getValue()));

答案 1 :(得分:3)

足够简单。获取基础地图的所有条目的流,并使用Collectors.toMap

进行收集
Map<Long, Long> newMap = listMap.stream()
    .flatMap(map -> map.entrySet().stream())
    .collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue));

如果有重复的密钥(您说不会存在),它将抛出

java.lang.IllegalStateException: Duplicate key <thekey>
相关问题