Как сравнить 2 LinkedHashMap и получить разницу в ключах и значениях? - PullRequest
0 голосов
/ 22 мая 2018

Есть 2 LinkedHashMaps.Я должен проверить, имеют ли оба LinkedHashMaps одинаковые ключи и значения.Если один LinkedHashMap содержит дополнительные ключи + значения, он должен быть напечатан или сохранен в 3-м LinkedHashMap.Если какой-либо ключ или значение отличается во 2-м LinkedHashMap, он должен быть уведомлен (печать в консоли)

Например

Map1 содержит {Aa, Bb, Cc}

Map2 содержит {Aa, Br, Cc, Zz}

Так что здесь 3-й LinkedHashMap должен содержать {Zz}, поскольку он содержит дополнительный ключ, и

{Br} должен быть напечатан, так как он модифицирован

1 Ответ

0 голосов
/ 22 мая 2018

вы можете использовать этот класс:)

public class MapCompare {
    private LinkedHashMap<String, String> differencesMap;
    private LinkedHashMap<String, String> extraMap;

    private void main(LinkedHashMap<String, String> map1, LinkedHashMap<String, String> map2) {
        this.differencesMap = new LinkedHashMap<>();
        this.extraMap = new LinkedHashMap<>();

        Set<Map.Entry<String, String>> set1 = ((LinkedHashMap<String, String>) map1.clone()).entrySet();
        Set<Map.Entry<String, String>> set2 = ((LinkedHashMap<String, String>) map2.clone()).entrySet();

        set1.removeAll(set2);
        compare(set1, map2);

        set1 = map1.entrySet();

        set2.removeAll(set1);
        compare(set2, map1);
    }

    private LinkedHashMap<String, String> getDifferencesMap() {
        return differencesMap;
    }

    private LinkedHashMap<String, String> getExtraMap() {
        return extraMap;
    }

    private void compare(Set<Map.Entry<String, String>> set, LinkedHashMap<String, String> map) {
        for (Map.Entry<String, String> entry : set) {
            String key = entry.getKey();
            String value = entry.getValue();
            if (map.containsKey(key) || map.containsValue(value)) {
                differencesMap.put(key, value);
            } else {
                extraMap.put(key, value);
            }
        }
    }

    public static void main(String[] args) {
        LinkedHashMap<String, String> map1 = new LinkedHashMap<>();
        map1.put("A", "a");
        map1.put("B", "b");
        map1.put("C", "c");
        LinkedHashMap<String, String> map2 = new LinkedHashMap<>();
        map2.put("A", "a");
        map2.put("C", "c");
        map2.put("B", "r");
        map2.put("Z", "z");

        MapCompare mapCompare = new MapCompare();
        mapCompare.main(map1,map2);

        System.out.println("diff: " + mapCompare.getDifferencesMap());
        System.out.println("extra: " + mapCompare.getExtraMap());
    }
}
...