1. ホーム

[解決済み】複数のフィールドでオブジェクトを比較する方法

2022-03-30 09:54:10

質問

いくつかのオブジェクトがあり、それらはいくつかのフィールドによって比較することができると仮定します。

public class Person {

    private String firstName;
    private String lastName;
    private String age;

    /* Constructors */

    /* Methods */

}

つまり、この例では、「もし」と聞いたときに

a.compareTo(b) > 0

aの姓がbの姓より先か、aがbより年上か、などなど...。

不必要な乱雑さやオーバーヘッドを追加することなく、この種のオブジェクト間の複数比較を可能にする最もクリーンな方法は何でしょうか?

  • java.lang.Comparable インターフェースは、1つのフィールドのみでの比較を可能にします。
  • 多数の比較メソッドを追加する(つまり compareByFirstName() , compareByAge() などなど...)は、ごちゃごちゃしていると私は思います。

では、どうすればいいのでしょうか?

どのように解決するのか?

を実装することができます。 Comparator を比較するもので、2つの Person オブジェクトを作成し、好きなだけ多くのフィールドを調べることができます。コンパレータの中に変数を入れて、どのフィールドと比較するかを指示することもできますが、おそらく複数のコンパレータを書く方が簡単でしょう。