Сравните два набора объектов в Java - PullRequest
0 голосов
/ 06 марта 2019

У меня есть два отсортированных набора: sortedSet1(Object ,Object1 , Object2 , Object3 , Object4 ) и sortedSet2(Object ,Object1 , Object2 , Object3 , Object4 ). У объектов есть другие списки с объектами внутри.

Я хочу сравнить каждое значение изнутри и уловить любые различия между двумя sortedSets. Я не хочу точную разницу. Я хочу видеть, есть ли какие-либо изменения. Я пробовал sortedSet1.equals(sortedSet2), но он не работает, если я изменяю значение внутри другого объекта внутри sortedSet, он не улавливает разницу. Я также пытался

if (!sortedSet1.containsAll(sortedSet2)) {
    // do something 
} 

без удачи .. Я думаю, что ответ существует в потоках, но у меня очень мало опыта с ними ..

Большое спасибо за вашу помощь.

1 Ответ

1 голос
/ 06 марта 2019

если я изменяю значение внутри другого объекта внутри sortedSet, оно не улавливает разницу

Сначала найти различия будет что-то вроде:

SortedSet<Object> common = new TreeSet<>(sortedSet1);
common.retainAll(sortedSet2);
SortedSet<Object> all = new TreeSet<>(sortedSet1);
all.addAll(sortedSet2);
SortedSet<Object> differences = new TreeSet<>(all);
differences.removeAll(common);

Однако ваше упоминание о изменении объекта, находящегося внутри набора, вызывает тревогу.

Никогда не следует изменять значение так, чтобы изменялся его используемый ключ (hashCode или здесь Comparable). Так как порядок и структурное расположение повреждены.Для древовидной структуры части дерева становятся недоступными, так как предполагается, что левое поддерево меньше ключа узла, а правое поддерево должно иметь узлы больше ключа узла.

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