2011-08-31 6 views
7

Javaには、複数の/別の実行方法であるの比較を可能にするために、クラス自体の外部のオブジェクトの比較を提供するためのComparator<T>があります。 順不同比較を行うのJava:等価性を判断するための外部クラス?

しかし、唯一の標準的な方法は、クラス内equals()をオーバーライドすることです。

クラスの外部で複数の/並べ替えられていない比較を提供する場合はどうすればよいですか?最終用途が順不同チェックのためであると仮定すると、(明白なユースケースは、特定のプロパティに基づいて等価クラスにコレクションを分割されています。)

(例えばソートやインデックス作成のためではない)であり、それは今までOK Comparator<T>を実装するだけのためにチェックしています2つのオブジェクトが等しい場合は0、2つのオブジェクトが等しくない場合は値!= 0を返します。 (ノート:私は、このソリューションにジャンプしない唯一の理由は、技術的には推移性と対称性を満たす関係を提供しないことによってComparatorの契約を破ることができるということです。)

が行われている必要がありますように思えEqualsComparator<T>標準クラスまたは何か。

(グアバは?このようなものを扱うん)

答えて

13

はい、グアバはEquivalenceインターフェースや(14.0をリリースグアバで削除)Equivalencesクラスがあります。

(そして、はい、それは非常に便利と悲しげにJavaで欠けている何か。私たちは本当にHashMapHashSetなどのために、この周りのオプションを持っている必要があります...)

Comparator<T>で大丈夫かもしれないが場合によっては、ハッシュベースのコレクションにとって重要な方法を提供していません。

+0

hmmm ...どちらもタグ付けされていますが、ベータです。 –

+0

@Jason:注意して使用してください:)(最終的に 'Equivalence'はインターフェースなので、あなたは*実装*に頼っているようではありません) –

+5

私はそれが離れることは約束できますが、それは流出している。たとえば、差し迫ったバージョン10.0では、それを抽象クラスに変更し、Equivalencesのほとんどを直接そのクラスに移しました(そして、ある時点で仕事を終えることになるでしょう)。 –

関連する問題