当前位置: 首页 > 知识库问答 >
问题:

比较两张几乎相同的地图,找出不同的关键值

夏和雅
2023-03-14

所以我有两个相同的映射,字符串作为键,整数作为值,我知道在某些事件之后,map2中只有1个值递增1。

Map<String, Integer> map1 = new HashMap<>();
map1.put("First", 1)
map1.put("Second", 2)
map1.put("Third", 3)
Map<String, Integer> map2 = new HashMap<>();
map2.put("First", 1)
map2.put("Second", 3)
map2.put("Third", 3)

所以我的问题是如何返回“第二”键,因为它的值增加了1。

共有1个答案

韩志专
2023-03-14

似乎您只想获取键,而不想获取值,所以下面的方法正好可以做到这一点。

public static <K> List mapDifference(Map<? extends K, ? extends Object> map1, Map<? extends K, ? extends Object> map2)
{
        List<K> keys = new ArrayList<K>();
        Set<Map.Entry<? extends K, ? extends Object>> set;
        Map<? extends K, ? extends Object> other;
        if(map1.size() > map2.size()) {
            set = map1.entrySet(); other = map2;
        } else {
            set = map2.entrySet(); other = map1;
        }
        Iterator<Map.Entry<? extends K, ? extends Object>> iterator = set.iterator();
        while(iterator.hasNext()) {
            Map.Entry<? extends K, ?  extends Object> entry = iterator.next();
            K key = entry.getKey();
            if(!other.containsKey(key) || !other.get(key).equals(entry.getValue())) {
                keys.add(key);
            }
        }
        return keys;
}

测试

Map<String, Integer> map1 = new HashMap<>();
map1.put("First", 1);
map1.put("Second", 2);
map1.put("Third", 3);
Map<String, Integer> map2 = new HashMap<>();
map2.put("First", 1);
map2.put("Second", 3);
map2.put("Third", 3);

List<String> diff = mapDifference(map1, map2);
System.out.println(diff);
[Second]
Map<String, Integer> map1 = new HashMap<>();
map1.put("First", 1);
map1.put("Second", 2);
map1.put("Third", 3);
Map<String, Integer> map2 = new HashMap<>();
map2.put("First", 1);
map2.put("Second", 3);
map2.put("Third", 3);
map2.put("Forth", 4);

List<String> diff = mapDifference(map1, map2);
System.out.println(diff);
[Second, Forth]
 类似资料:
  • 问题内容: 我想比较同一张表中的两列。我希望能够返回两列具有相同值的所有行。 我正在寻找类似的东西。 因此,在下面的示例中,我将仅返回第一行: 如果有关系,我正在使用(更具体地讲)。 问题答案: 应该管用。不是吗 如果不是,它们是否具有相同的数据类型和长度?您可能需要转换。 我不了解WebSql,但是我看到一些数据库系统拒绝匹配,即使其中一个是varchar(5)而另一个是varchar(10),

  • 问题内容: 如果我想找出两个键中是否没有一个键与另一个键不同,并且该键的值彼此匹配,如何最好地比较两个键。 将A与B进行比较时,由于B和D键的不同,它应该会失败。 如何最好地比较未排序的哈希图? 问题答案: 做一个支票上两者秒。 注意: 如果您包含键,那没有问题,但是如果您的Map包含类型键,则需要确保您的类实现了。

  • 本文向大家介绍C#比较二个数组并找出相同或不同元素的方法,包括了C#比较二个数组并找出相同或不同元素的方法的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了C#比较二个数组并找出相同或不同元素的方法。分享给大家供大家参考,具体如下: 希望本文所述对大家C#程序设计有所帮助。

  • 问题内容: 提前致谢。感谢您的帮助。 我想比较两个相同类型和结构的任意JToken(NewtonSoft的Json.Net)。 主要目标 是能够使用此方法对两个Json字符串进行排序,以便即使开始时它们具有相同的数据,但顺序不同,最后它们是两个完全相同的字符串。因此排序标准并不重要,重要的是该标准始终相同。并且应该考虑每个小数据元素。 JToken可以是以下几种类型之一:。我没有考虑比较。 获得一

  • 问题内容: 我有两张桌子和。 第一台具有与第二表有田,, 我想要一个帐户进行多少次子请求以及他进行了多少次抓取的计数(基于,如果该帐户中填充了他的) 在一个查询中 输出: 问题答案: 使用类似 诀窍是使用表两次:和,每次由不同的字段联接。 关于效率的注意事项:我不确定,但是我相信这个解决方案比子查询解决方案要快,尽管没有对其进行测试(至少不会慢一些)。只要有可能,我总是更喜欢子查询。