Читаемый способ узнать, есть ли хотя бы одно различие между двумя Map <Long, Integer> в Java? - PullRequest
0 голосов
/ 30 октября 2009

У меня есть две карты типа Map , одна с именем «oldValues» представляет старое состояние объекта, а другая с именем «newValues» представляет новое состояние того же объекта.

Существует ли простой и читаемый способ узнать, отличаются ли старое состояние от нового (то есть, изменилось ли состояние)?

В идеале, я бы хотел использовать библиотечную функцию "java.utils" или "Apache Commons", например:

hasChanged = !MapUtils.diff(oldValues, newValues).isEmpty();

Примечание: я искал, но не нашел.

Спасибо.

Ответы [ 2 ]

5 голосов
/ 30 октября 2009

Не работает ли метод равных?

2 голосов
/ 30 октября 2009

Равенство кажется плохой идеей, потому что проверка всей карты на равенство кажется дорогой. Вам также нужно заблокировать обе карты, чтобы сделать проверку на поточность.

В ConcurrentHashMap используется идея, в которой карта использует счетчик для обнаружения изменений. Если бы это было публично, вы могли бы просто сравнить счетчик на 2 картах на равенство. Это не так, но вы можете сделать то же самое с помощью грязного флага или, возможно, класса, представляющего состояние объекта, которое оборачивает карту и упрощает проверку на равенство.

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