Есть ли какой-либо механизм Equalator, такой как Comparator, чтобы я мог иметь разные равные для сопоставления списков?
EDIT: Моя цель состоит в том, чтобы различать текущий list1.equals(list2), который проверяет, является ли это поверхностной копией или также глубокой копией со всеми объектами a.equals(b) и list1.identical(list2) который проверяет, является ли это просто мелкой копией с неизмененным списком
Все эти списки от одной и той же модели. Некоторые из них являются копиями самих себя, поэтому содержат указатель на одни и те же объекты, а другие являются глубокими копиями, поэтому иерархия полностью реплицируется, потому что у них есть обновления в содержании, а не только в структуре.
Я часто делаю list1.equals(list2), но мне нужен механизм, чтобы определить, являются ли оба ПОЛНЫМИ копиями (одинаковые объекты в одном и том же порядке для коллекций) или иногда они являются ЛОГИЧЕСКИМИ копиями (через мою собственную реализованную логику equals), поэтому list будет вызывать equals, а объекты должны реализовывать нечто большее, чем a==b.
Моя проблема в том, что нет интерфейса эквалайзера, и если я переопределяю объекты равными, я теряю возможность сравнения по ВСЕМ РАВНЫМ (a==b)
Например, это было бы неплохо;
Collections.equal(l1,l2,new Equalator(){
@Override public boolean equals(Obj1,Obj2){
//Default lists comparison plus commparison of objects based on
return (obj1.propertyX() == obj2.propertyX());
}
});
и все же я мог бы сделать list1.equals(list2), чтобы они использовали равные по умолчанию (obj1 == obj2), и это было бы верно только в том случае, если бы содержащиеся объекты были точно такими же.
Первая операция полезна для проверки того, что список (который может быть обновленным списком с полностью воссозданными объектами из модели) по-прежнему равен старому списку.
Вторая операция полезна для проверки того, что список (который был неглубокой копией старой текущей версии модели данных) не содержит каких-либо трансцендентных изменений от перемещения внутри кода, когда он был обновленной версией.
EDIT: Очень хорошим примером может быть список Point(x,y). Мы должны быть в состоянии узнать, равны ли оба списка, потому что они представляют собой точно такой же набор точек, или равны, потому что точки, которые они содержат, равны логическим образом. Если бы мы могли реализовать как phyEqual, так и logEqual для объекта и иметь оба метода в любом объекте, то list.phyEqual(list2) или list1.logEqual(list2)