1. ホーム

[解決済み】Javaで2つのフィールドでソートする方法は?

2022-04-10 12:58:19

質問

オブジェクトの配列があります person (int age; String name;) .

この配列を名前のアルファベット順に並べ、さらに年齢順に並べるにはどうしたらよいでしょうか?

この場合、どのようなアルゴリズムを使用するのでしょうか?

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

を使用することができます。 Collections.sort を以下のように設定します。

private static void order(List<Person> persons) {

    Collections.sort(persons, new Comparator() {

        public int compare(Object o1, Object o2) {

            String x1 = ((Person) o1).getName();
            String x2 = ((Person) o2).getName();
            int sComp = x1.compareTo(x2);

            if (sComp != 0) {
               return sComp;
            } 

            Integer x1 = ((Person) o1).getAge();
            Integer x2 = ((Person) o2).getAge();
            return x1.compareTo(x2);
    }});
}

List<Persons> は、名前順、年齢順に並べられるようになりました。

String.compareTo 2つの文字列を辞書順に比較します。 ドキュメント .

Collections.sort は、ネイティブのCollectionsライブラリの静的メソッドです。これは実際のソートを行い、リスト内の2つの要素を比較する方法を定義するComparatorを提供する必要があるだけです。 compare メソッドを使用します。