Comparator のような Equalator メカニズムはありますか?
編集:私の目標は、現在の list1.equals(list2) を区別することです。これは、浅いコピーであるか、すべてのオブジェクト a.equals(b) を含むディープ コピーであるかをチェックし、単純な浅いコピーであるかどうかをチェックする list1.identical(list2) を区別することです。変更されていないリスト
これらのリストはすべて同じモデルのものです。同じオブジェクトへのポインターを保持するように自分自身のコピーであるものもあれば、階層が完全に複製されるディープ コピーであるものもあります。これは、構造だけでなく内容が更新されているためです。
私はしばしば list1.equals(list2) を作成していますが、両方が TOTAL コピー (コレクションの同じ順序で同じオブジェクト) であるか、場合によってはそれらが LOGICAL コピーであるか (独自に実装された論理 equals を介して) を伝えるメカニズムが必要なので、リストします。 equals を呼び出し、オブジェクトは a==b 以上のものを実装する必要があります。
私の問題は、Equalator インターフェイスがないことです。オブジェクトをオーバーライドすると、TOTAL EQUAL (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) を実行できるので、デフォルトの equals (obj1==obj2) を使用します。これは、含まれているオブジェクトがまったく同じである場合にのみ当てはまります。
最初の操作は、リスト (モデルから完全に再作成されたオブジェクトを含む更新されたリストである可能性があります) がまだ古いリストと等しいかどうかを確認するのに役立ちます。
2 番目の操作は、リスト (データ モデルの古い現在のバージョンの浅いコピー) をチェックするのに役立ちます。これには、更新されたバージョンのときにコード内で移動することによる超越的な変更が含まれていません。
編集:非常に良い例は、Point(x,y) のリストを持つことです。両方のリストがまったく同じポイントのセットであるため等しいか、それらに含まれるポイントが論理的に等しいため等しいかを知ることができるはずです。phyEqual と logEqual の両方をオブジェクトに実装し、任意のオブジェクトに両方のメソッドを含めることができる場合、 list.phyEqual(list2) または list1.logEqual(list2)