【问题标题】:How to join two hashMap by their key如何通过它们的键加入两个hashMap
【发布时间】:2014-08-10 07:18:27
【问题描述】:

我有两个 HashMap。我需要通过它们的键加入两个hashMap。

Map<String, String> firstMap = new HashMap<String, String>();
Map<String, String> secondMap = new HashMap<String, String>();
firstMap= [{K1,V1},{K2,V2}]
secondMap= [{K2,V2},{K3,V3}]

我需要我的第三张地图才能拥有

thirdMap= [{K2,V2}]

请帮帮我。谢谢

【问题讨论】:

    标签: java map hashmap


    【解决方案1】:

    这段代码应该做你需要的:

    Map<String, String> thirdMap = new HashMap<String, String>();
    
    for (String key : firstMap.keySet()) {
        if (secondMap.containsKey(key)) {
            thirdMap.put(key, firstMap.get(key));
        }
    }
    

    【讨论】:

      【解决方案2】:

      Google Guava 库有一个实用程序 MapDifference,它给出了两个地图之间的区别。

      MapDifference<String, String> diff = Maps.difference(map1, map2);
      

      【讨论】:

        【解决方案3】:

        执行以下操作:

        Map<String, String> firstMap = new HashMap<>();
        Map<String, String> secondMap = new HashMap<>();
        Map<String, String> join = new HashMap<>();
        
        for (Entry<String, String> entry : firstMap.entrySet())
            if (secondMap.containsKey(entry.getKey())) {
                String value = secondMap.get(entry.getKey());
                if (value.equals(entry.getValue())) {
                    join.put(entry.getKey(), value);
                }
            }
        }
        

        【讨论】:

        • 请注意,此答案还确保值相等,而不仅仅是键。这是你的意图吗?
        • 没有。我只需要钥匙相同。值可以不同。
        【解决方案4】:

        映射 firstMap = new HashMap(); 映射 secondMap = new HashMap();

         // Add everything in firstMap 
            map2.putAll(Maps.difference(firstMap , secondMap ).entriesOnlyOnLeft());
        

        【讨论】:

          【解决方案5】:
          firstMap.keySet().retainAll(secondMap.keySet());
          

          这假设您可以更改 firstMap。如果没有,请先复制:

          Map<String, String> thirdMap = new HashMap<>(firstMap);
          

          然后

          thirdMap.keySet().retainAll(secondMap.keySet());
          

          【讨论】:

          • 这在最终地图中以K1K3 结束,这不是OP 想要的。
          • 确实,不知道我在想什么。我以为他想像标题所说的那样加入他们。 :)
          猜你喜欢
          • 1970-01-01
          • 2019-04-10
          • 1970-01-01
          • 2011-12-20
          • 2018-01-28
          • 2021-02-25
          • 2020-09-17
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多