Изменилась карта. Как получить изменения?

Рейтинг: 0Ответов: 1Опубликовано: 25.04.2015

Есть карта Map. В прекрасный момент несколько её Value могут измениться, ключи конечно же остаются на местах . Мне нужно получить карту которая бы содержала в себе только те пары ключ-значение которые были изменены.

введите сюда описание изображения

Думал взять keySet() и сделать removeAll() но ключи ведь не меняются, поэтому я получу пустой результат.

Думал получить values() из двух карт и сделать removeAll(), в этом случае я конечно получаю пары которые изменились, но без ключей. Просто голые значения без ключей не годяться. Как быть?

Ответы

▲ 2Принят

Не знаю, можете ли вы использовать сторонние библиотеки, поэтому предлагаю такой вариант:

Map<String, Object> a = new HashMap<String, Object>();
a.put("1", "one");
a.put("2", "two");
a.put("3", "three");
Map<String, Object> b = new HashMap<String, Object>(a);
b.put("1", "ein");
System.out.println("before: " + a);
System.out.println("after: " + b);
Map<String, Object> c = new HashMap<String, Object>();
for (Map.Entry<String, Object> e : a.entrySet()) {
  String key = e.getKey();
  if (!e.getValue().equals(b.get(key))) {
    c.put(key, b.get(key));
  }
}
System.out.println("result: " + c);