Сравните два хешмапа hashmap - PullRequest
0 голосов
/ 23 сентября 2019

У меня есть две хэш-карты хэш-карт.для экземпляра let,

Hashmap map1 = key : mapview Value : {backgroundimage=character varying, mapviewname=character varying, mapviewid=character} key : am_mypage_template_mgs Value : {resourceid=integer, pageid=integer} key : am_tomcatinfo Value : {resourceid=bigint, url=character varying, sslenabled=character varying}

и Hashmap map2 = key : mapview Value : {backgroundimage=character varying, mapviewname=character varying, mapviewid=integer} key : am_mypage_template_mgs Value : {resourceid=integer} Я должен сравнить эти два и найти, какие ключи от map1 отсутствуют в map2.Если ключи присутствуют, я должен сравнить внутреннюю карту и сравнить ключи внутренней карты map1 с внутренней картой map2.Если ключи присутствуют, я должен сравнить значения, соответствующие внутренней карте map1 с map2.Мой код:

map1.entrySet().forEach(entry -> {
        if (map2.containsKey(entry.getKey())) {
            if (entry.getValue().equals(map2.get(entry.getKey()))) {
                count++;
            } else {
                entry.getValue().entrySet().forEach(inside_entry->{
                if(map2.get(entry.getKey()).containsKey(inside_entry.getKey())) {

                    Map<String, String> n = new  HashMap<String, String>();
                    n.putAll(map2.get(entry.getKey()));
                    if((inside_entry.getValue()).equals(map2.get(n))){

                    }
                    else {
                        System.out.println("Tablename1 : "+ entry.getKey() +" Key :"+inside_entry.getKey()+" value : "+inside_entry.getValue());
                    }
                }
                });
                System.out.println(entry.getValue());
            }
        } else {
            System.out.println("\"" + entry.getKey() + "\" entire table is not found");
        }
    });

Мой вывод должен быть таким,

key am_tomcatinfo in map1 missing in map2 
In am_mypage_template_mgs, pageid in map1 is missing in map2
In mapview, mapviewid=character in map1 is not equal to mapviewid=integer in map2

Что мне делать?

1 Ответ

0 голосов
/ 23 сентября 2019

Согласно вашему описанию, прямой способ - использовать forEach() (не entrySet().forEach()) обеих карт для сравнения ключей и значений следующим образом:

map1.forEach((k0, v0) -> {
    if (!map2.containsKey(k0)) {
        System.out.println(String.format("key %s in map1 missing in map2", k0));
    } else {
        v0.forEach((k1, v1) -> {
            if (!map2.get(k0).containsKey(k1)) {
                System.out.println(String.format("In %s, %s in map1 is missing in map2", k0, k1));
            } else {
                if (!v1.equals(map2.get(k0).get(k1))) {
                    System.out.println(String.format("In %s, %s=%s in map1 is not equal to %s=%s in map2", k0, k1, v1, k1, map2.get(k0).get(k1)));
                }
            }
        });
    }
});

И вывод консоли

В am_mypage_template_mgs, pageid на карте 1 отсутствует на карте 2
ключ am_tomcatinfo на карте 1 отсутствует на карте 2
В карте просмотра mapviewid = символ на карте 1 не равен mapviewid = целое число на карте 2

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...