10

私は myObject の Collection coll を持っています。コレクションにそのような要素がない場合にのみ、要素を coll に追加したいと思います。

myObject の equals メソッドをオーバーライドしました。20 個の属性が等しいかどうかをチェックします。

ただし、コレクションの場合は、これらの属性の 1 つだけに基づいて等価チェック (したがって追加) を行いたいと思います。

私のアーキテクチャに欠陥があるのか​​もしれません.equalsの定義を2つ持つべきではなく、代わりに2つの異なるオブジェクトを持つべきです.

ただし、あまりリファクタリングしなくても、ここから必要なものを達成することは可能ですか? つまり、比較チェックの方法を教えてくれる、ある種の Set コレクションが欲しいのです。これは Collection.sort() メソッドに似ており、比較をチェックするコンパレータを提供できます。

4

4 に答える 4

2

既存のコンテナーを使用して、ここで一意性を強制することはできませんequals

属性が 1 つだけの場合は、その属性をキーとして Map を使用できます。これにより、その属性の値ごとに 1 つのエントリのみが許可されます。

equalshashCodeコレクションで使用することを目的としています。デザインを変更する必要があります。たぶん、あなた自身の同等物(あなたが今持っているもの)を別のものと呼んでください。おそらく、これらのものを直接コレクションに入れるのではなく、何らかのアダプターにラップしてください。

于 2013-04-15T06:40:41.557 に答える