首页 > 解决方案 > 在 Java 中区分和比较 Map 值的有效方法

问题描述

我有 2 个 LinkedHashMap,我正在尝试相互比较,并且应该显示基于键的值是否有任何差异。

srcMap={Col1=Val1,Col2=Val2,Col3=Val3,Col4=ValDiff,,Col5=Val3}
dstMap={Col1=Val1,Col2=Val2,Col3=Val3,Col4=Val3,,Col5=ValMisMatch}

我正在尝试使用循环以下方式。

Iterator<Map.Entry<String,String>> itSrc=srcMap.entrySet().iterator();
while(itSrc.hasNext()){
String srcKey=itSrc.next().getKey();
String srcValue=srcMap.get(srcKey);
String dstValue=dstMap.get(srcKey);
if(!srcValue.equals(dstValue))
  //printing value and corresponding key
}

我正在寻找的是,有没有比这更好/更快的方法?

标签: java

解决方案


我认为这样的事情会很有趣

for(Map.Entry<String,String> entry : srcMap.entrySet()) {
    String key = entry.getKey();
    if (dstMap.contains(key)) {
        if (entry.getValue().equals(dstMap.get(key)) {
            continue;
        }
    }

    System.out.println("Your desired output");
}

UPD。如果您的程序不希望有人映射null到某个键:

for(Map.Entry<String,String> entry : srcMap.entrySet()) {
    String key = entry.getKey();
    
    if (entry.getValue().equals(dstMap.get(key)) {
        continue;
    }

    System.out.println(
        "Key:" + key + 
        "; Values differ:" + entry.getValue() + 
        "," + dstMap.get(key)
    );
}

请注意,map.get(key)在两种情况下可能会返回 null - 有人将 null 映射到键,或者键的值不存在


推荐阅读