首页 > 解决方案 > Java8:操作地图的有效方法

问题描述

我有两个映射定义映射如下共享,基于 map1 中一个键的存在,我需要将条目复制到另一个映射。下面的代码可以根据需要工作,但有没有更好更简单的方法来实现同样的效果。感谢您的建议。

    Map<Object, HashSet<Map<Object, String>>> map1 = new HashMap<>();
    Map<Object, HashSet<Map<Object, String>>> map2 = new HashMap<>();

    map1.entrySet().stream().forEach(e -> {
        Set<Map<Object, String>> infoMapSet = e.getValue();
        infoMapSet.forEach(
                inMap -> {
                    if (inMap.containsKey("isMerge")) {
                        Set<Map<Object, String>> set = new HashSet<>();
                        set.add(inMap);
                        map2.put(e.getKey(), set);
                    }
                });
    });

标签: javajava-8

解决方案


Map.forEach您可以使用and来提高代码的可读性和表达性Map.computeIfAbsent

Map<Object, Set<Map<Object, String>>> map2 = new LinkedHashMap<>();

map1.forEach((key, setInfo) ->
    setInfo.forEach(inMap -> {
        if (inMap.containsKey("isMerge")) 
            map2.computeIfAbsent(key, k -> new LinkedHashSet<>()).add(inMap);
    }));

注意:我使用LinekdHashMapandLinkedHashSet来保留插入顺序。


推荐阅读