Java | データベースの結果リストを複数キーでソート

Java Java
スポンサーリンク

データベースから取得した結果リスト(例えば List<Entity>)を 複数キーでソートする方法を解説します。実務では「部署 → 年齢 → 名前」や「日付 → 金額」など複数条件で並べ替えることがよくあります。


基本の考え方

Java では Comparator を使って複数キーでソートできます。

  • Stream API.sorted()
  • Collections.sort()Comparator
  • Comparator.comparing()+thenComparing()` の組み合わせ

サンプルコード(社員リストをソート)

例: 社員クラス

class Employee {
    String department;
    int age;
    String name;

    Employee(String department, int age, String name) {
        this.department = department;
        this.age = age;
        this.name = name;
    }

    @Override
    public String toString() {
        return department + " - " + age + " - " + name;
    }
}
Java

複数キーでソート

import java.util.*;

public class MultiKeySortExample {
    public static void main(String[] args) {
        List<Employee> employees = Arrays.asList(
            new Employee("Sales", 30, "Tanaka"),
            new Employee("HR", 25, "Sato"),
            new Employee("Sales", 25, "Suzuki"),
            new Employee("HR", 30, "Kato"),
            new Employee("Sales", 30, "Ando")
        );

        // 部署 → 年齢 → 名前 の順でソート
        employees.sort(
            Comparator.comparing((Employee e) -> e.department)
                      .thenComparing(e -> e.age)
                      .thenComparing(e -> e.name)
        );

        employees.forEach(System.out::println);
    }
}
Java

出力例

HR - 25 - Sato
HR - 30 - Kato
Sales - 25 - Suzuki
Sales - 30 - Ando
Sales - 30 - Tanaka

Stream API を使う場合

employees.stream()
    .sorted(
        Comparator.comparing((Employee e) -> e.department)
                  .thenComparing(e -> e.age)
                  .thenComparing(e -> e.name)
    )
    .forEach(System.out::println);
Java

応用ポイント

  • 昇順/降順の切り替え Comparator.comparing(Employee::getAge).reversed()
  • 数値や日付の比較
    Comparator.comparingLong()Comparator.comparingInt() を使うと効率的。
  • 複合条件
    thenComparing() を重ねることで「部署 → 年齢 → 名前 → 日付」など自由に組み合わせ可能。

💡 まとめ

  • Comparator.comparing + thenComparing が複数キーソートの基本。
  • Stream API を使うと宣言的に書けて読みやすい。
  • 実務では「部署 → 日付 → ID」など複合条件が頻出。
Java
スポンサーリンク
シェアする
@lifehackerをフォローする
スポンサーリンク
タイトルとURLをコピーしました