【问题标题】:How to compare two hashmaps based on keys and if the values are mismatched I need print the mismatch key and values如何根据键比较两个哈希图,如果值不匹配,我需要打印不匹配的键和值
【发布时间】:2017-11-11 06:49:53
【问题描述】:

我会解释这个场景,我有两个哈希映射让我们采取

Map<String,String> map_A = new HashMap<>(); 

mapA.put("Name", "Jerry");
mapA.put("State", "Texas");

Map<String,String> map_B = new HashMap<>();

mapB.put("Name","TOM");
mapB.put("State", "Texas");

我的钥匙在所有情况下都是一样的。

预期输出:

名称 Jerry TOM 不匹配

只有在不匹配的情况下才需要打印。

【问题讨论】:

  • 您有问题吗?如果您已尝试过此操作并且无法使其正常工作,请发布您尝试过的内容。如果您还没有尝试过,请先尝试。
  • 因缺乏尝试/先前的研究而被否决。这确实是基本的东西,并且有无数这样的例子。除此之外:阅读原始类型 - 然后停止使用它们。您应该将类​​型信息放在地图声明的左侧!
  • 有什么问题?根据键获取值比较值,如果不相等则打印键。
  • @Lokesh 我需要比较两个地图...如果值不匹配,我需要在控制台中显示键将是相同的
  • @PrishiKumar 检查答案

标签: java collections hashmap


【解决方案1】:

你可以试试这个:

public static void main(String[] args) {
    Map<String,String> mapA = new HashMap<>();
    mapA.put("Name", "Jerry");
    mapA.put("State", "Texas");
    Map<String,String> mapB = new HashMap<>();
    mapB.put("Name","TOM");
    mapB.put("State", "Texas");
    Set<String> bKeys = mapB.keySet();
    mapA.keySet().stream()
            .filter(bKeys::contains)
            .distinct()
            .map(key -> {
                String valA = mapA.get(key);
                String valB = mapB.get(key);
                if (Objects.equals(valA, valB)) {
                    return null;
                }
                return key + " " + valA + " vs " + valB + " mismatched";
            })
            .filter(Objects::nonNull)
            .forEach(System.out::println);
}

【讨论】:

  • 谢谢yegor,但这只会检查第一对
  • 不,它对 mapA 和 MapB 的所有键都是 itarate 并获得不同的键值。之后,我们检查 map 中的值是否不相等并使用 diff 创建字符串
  • 问题是当我使用此方法时,map 1 数据正确来自数据库,但对于 map2 值,我得到的值不在数据库中。当我尝试显示键和值正确出现时,地图 2 中很少有值出现为 null .. 以及如何从 main 方法调用它?
  • @PrishiKumar 我已经为你的最后评论编辑了我的答案
【解决方案2】:

根据键将相同并显示不同值的键,您可以尝试这样的操作

public class test {
    public static void main(String args[]){
        HashMap<String, String> map1 = new HashMap<>();
        HashMap<String,String> map2 = new HashMap<>();
        map1.put("Name", "Jerry");
        map1.put("State", "Texas");
        map2.put("Name","TOM");
        map2.put("State", "Texas");
        Iterator<?> it = map1.entrySet().iterator();
        Iterator<?> it1 = map2.entrySet().iterator();
        while (it.hasNext() && it1.hasNext()) {
            Map.Entry pair = (Map.Entry)it.next();
            Map.Entry pair1 = (Map.Entry)it1.next();
            if(!pair.getValue().equals(pair1.getValue())) {
                System.out.println(pair.getKey()+" "+pair.getValue()+" "+pair1.getValue()+" mismatched");
            }
        }
    }
}

输出

Name Jerry TOM mismatched

【讨论】:

  • @PrishiKumar 是基于相同标准的比较吗?顺便说一句,这段代码工作得很好,我已经在我的电脑上测试过了
  • 即使匹配,它也会显示少数字段不匹配。 .
  • 列名作为键,列值作为值..两个相同结构的表
  • @PrishiKumar 我看到有一个错误,你现在可以检查一下吗?现在应该可以正常工作了
  • Iterator> 这是正确的吧?
猜你喜欢
  • 2015-04-25
  • 1970-01-01
  • 2020-07-16
  • 2012-09-05
  • 1970-01-01
  • 2021-10-30
  • 1970-01-01
  • 2021-06-15
  • 1970-01-01
相关资源
最近更新 更多