Javaでは、Comparatorインターフェースを使用すると、クライアントは任意のタイプのequals()およびcompare()メソッドを指定できます。Comparatorは、並べ替えが必要なほとんど(またはすべて)のコレクションに渡すことができ、指定されたクラスのメソッドの代わりにComparatorのメソッドが使用されます。これにより、クライアントは、自然な順序とは異なる方法でオブジェクトを並べ替えたり、自然な順序を持たない(つまり、Comparableを実装していない)オブジェクトを並べ替えたりすることができます。
ハッシュ用の同様のインターフェースがないのはなぜですか?hashCode()とequals()の2つのメソッドを指定でき、コンパレーターがソートに役立つのと同じように、HashSetsまたはHashMapsに役立ちます。
編集:この質問をこの他の質問の複製としてマークした人のために、他の質問はなぜハッシュコードがインターフェースではなくすべてのクラスに含まれているのかを尋ねますが、この質問はハッシュ関数を抽象化して複数の実装を可能にすることについてです。
回答編集:この機能を取得するための最良の方法は次のようです:
-外部ライブラリを使用しても問題がない場合、および/またはすでにGuava(多くの理由で素晴らしいライブラリです)を使用している場合、Guavaにはこれを可能にするEquivalentクラスがあります。
-外部ライブラリを使用したくない場合は、このSOの質問の一番上の回答で行われているのと同様に、カスタムビルドのアダプタを使用できます。