Механизм для различных равных (физических и логических равенств )для объектов в Коллекции

Есть ли какой-либо механизм Equalator, такой как Comparator, чтобы я мог иметь разные равные для сопоставления списков?

РЕДАКТИРОВАТЬ:Моя цель состоит в том, чтобы различать текущий 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 ), и это было бы верно только в том случае, если бы содержащиеся объекты были точно такими же.

Первая операция полезна для проверки того, что список (, который может быть обновленным списком с полностью воссозданными объектами из модели ), по-прежнему равен старому списку.

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

РЕДАКТИРОВАТЬ:Очень хорошим примером может быть список Point (x,y ). Мы должны быть в состоянии узнать, равны ли оба списка, потому что они представляют собой точно такой же набор точек, или равны, потому что точки, которые они содержат, равны логическим образом. Если бы мы могли реализовать как phyEqual, так и logEqual для объекта и иметь оба метода в любом объекте, то list.phyEqual (list2 )или list1.logEqual (list2)

5
задан Whimusical 1 August 2012 в 13:23
поделиться