0

Person名前、年齢、住所、電話、メールなどの単純な属性を持つクラスがあるとします。

私はSetsそれぞれのオブジェクトを含んでいPersonます。

Set重複をエレガントに削除するために、セットごとに特定の等価性を動的に定義したいと思います。

たとえば、電話に基づいて重複する人物を削除するセットと、電子メールで重複する人物オブジェクトを削除するセットが必要です。

私が知っている唯一の方法は、何度もサブクラスPersonを作成し、私の要件に基づいて equals をオーバーライドすることですが、それはクラス数の爆発につながります。

の場合は許可されComparatorsます。同じオブジェクトに対して、必要な/必要な数の匿名コンパレーターを定義できます。

Java具体的には、オブジェクトの等価の定義は 1 つしかないのに、複数のコンパレータを定義できる理由を理解したいと思います。

この場合、どのような方法が最善でしょうか?

4

2 に答える 2

0

セットの代わりにマップを使用するのはどうですか? マップのキーは一意性が定義される属性を決定し、マップの値は一意のキー オブジェクトのコレクションです。

于 2013-04-09T07:33:44.320 に答える
-1

DublicateRemover クラスのように書きます。これらのクラスには、特定のフィールドの重複を削除するためのロジックが含まれます。例えば:

public class DublicateRemover{
 public static Set<Person> removeDublicateByPhone(Set<Person> persons, Set<Person> persons2) {
  ...
 }
 public static Set<Person> removeDublicateByName(Set<Person> persons, Set<Person> persons2) {
  ...
 }

}
于 2013-04-09T07:15:38.260 に答える