• 判断map是否包含另一个map


      判断map是否包含另一个map:

    map不同与list集合,list集合有直接判断集合是否包含其他集合或者元素的方法。

    • boolean contains(Object o) 

      如果list包含指定的元素,则返回true。

    • boolean containsAll(Collection<?> c) 

      如果list包含指定collection的所有元素,则返回true。

    map虽然没有直接判断是否包含其他map的方法,但是map有根据key或者value是否存在与map中的方法。

    • containsKey(Object key) 

         如果此映射包含对于指定key的映射关系,则返回true。

    • containsValue(Object value) 

      如果此映射将一个或多个键映射到指定值,则返回true。

    有了上面的两个方法,就可以采取其他转换的方式去判断了。思路如下:

      由于只能比较key和value,而要判断map是否包含另一个map,那就要同时比较key与value,方法可以是:将key和value改造成特定格式的字符串,作为key或者value,在进行比较key或者value,就可以达到同时比较key和value的效果了。

    当然这个过程中还用到了map的遍历: map遍历有多种方式:

    1、Map.Entry遍历

    for (Map.Entry<Integer, Integer> entry : map.entrySet()) {
         System.out.println("key = " + entry.getKey() + ", value = " + entry.getValue());
    }

      这种方式可以获取到key和value。

    2、keySet遍历

    for (Integer key : map.keySet()) {
        System.out.println("key = " + key);
    }

      这种方式遍历遍历key

    3、values遍历

    for (Integer value : map.values()) {
          System.out.println("key = " + value);
    }

      这种方式遍历value。

    4、Iterator遍历

    Iterator<Map.Entry<Integer, Integer>> it = map.entrySet().iterator();
         while (it.hasNext()) {
             Map.Entry<Integer, Integer> entry = it.next();
             System.out.println("key = " + entry.getKey() + ", value = " + entry.getValue());
    }

    简单示例如下:

    public static void main(String[] args) {
            Map<String, String> map1 = new HashMap<>();
            Map<String, String> map2 = new HashMap<>();
            Map<String, String> mapA = new HashMap<>();
            map1.put("a", "b");
            map1.put("b", "d");
            map1.put("a", "c");
            map1.put("e", "r");
    
            map2.put("a", "b");
            map2.put("a", "c");
    
            for (Map.Entry<String, String> entry : map1.entrySet()) {
                String map1Key = entry.getKey();
                String map1Value = entry.getValue();
                String map1KeyVal = map1Key + ":" + map1Value;
                String map1ValKey = map1Value + ":" + map1Key;
                mapA.put(map1KeyVal, map1ValKey);
            }
    
            // 判断map1是否包含map2
            for (Map.Entry<String, String> entry : map2.entrySet()) {
                String map2Key = entry.getKey();
                String map2Value = entry.getValue();
                String map2KeyVal = map2Key + ":" + map2Value;
                boolean keyExist = mapA.containsKey(map2KeyVal);
                boolean valExist = mapA.containsValue(map2KeyVal);
                if (keyExist == false){
                    System.out.println("map1 不包含 map2");
                }
            }
        }

    在查看Map.Entry的方法时发现entry有一个equal()方法,可以比较单个的map,但在使用的还是需要去做变通:

    示例:

    for (Map.Entry<String, String> entry : map1.entrySet()) {
        for (Map.Entry<String, String> entry2 : map2.entrySet()){
             boolean result = entry.equals(entry2);
         。。。
        }
    }
  • 相关阅读:
    优化输出质数
    springboot嵌入式Servlet容器自动配置原理
    springboot中配置servlet三大组件
    springboot中springmvc的自定义配置
    springboot实现自定义国际化
    springboot错误处理机制及自定义错误处理
    SpringBoot对静态资源的映射规则
    docker中启动mysql容器
    Java函数式编程(一)
    java并发编程之美——高级篇(三)
  • 原文地址:https://www.cnblogs.com/jylee/p/11283938.html
Copyright © 2020-2023  润新知