Java | ソートをユーティリティメソッドとして再利用化

Java Java
スポンサーリンク

では「ジェネリクス対応のユーティリティメソッド」を作ってみましょう。これにより、どんな型のリストでも Comparator を渡せばソート可能になります。実務では「社員リスト」「商品リスト」「ファイルリスト」など様々な型を扱うので、汎用的なソートユーティリティは非常に便利です。


サンプルコード

ユーティリティクラス(ジェネリクス対応)

import java.util.*;

public class SortUtils {

    // ジェネリクス対応のソートメソッド
    public static <T> void sort(List<T> list, Comparator<? super T> comparator) {
        list.sort(comparator);
    }

    // 昇順ソート(Comparableを実装している型用)
    public static <T extends Comparable<? super T>> void sortAsc(List<T> list) {
        Collections.sort(list);
    }

    // 降順ソート(Comparableを実装している型用)
    public static <T extends Comparable<? super T>> void sortDesc(List<T> list) {
        list.sort(Collections.reverseOrder());
    }
}
Java

利用例(Employeeクラス)

class Employee {
    private String name;
    private int age;

    public Employee(String name, int age) {
        this.name = name;
        this.age = age;
    }
    public String getName() { return name; }
    public int getAge() { return age; }

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

メインクラス

import java.util.*;

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

        // 年齢昇順
        SortUtils.sort(employees, Comparator.comparing(Employee::getAge));
        System.out.println("年齢昇順: " + employees);

        // 名前降順
        SortUtils.sort(employees, Comparator.comparing(Employee::getName).reversed());
        System.out.println("名前降順: " + employees);

        // Comparableを持つ型(例: Integer)
        List<Integer> numbers = Arrays.asList(5, 2, 8, 1, 3);
        SortUtils.sortAsc(numbers);
        System.out.println("昇順: " + numbers);

        SortUtils.sortDesc(numbers);
        System.out.println("降順: " + numbers);
    }
}
Java

実行例

年齢昇順: [Sato (25), Suzuki (28), Tanaka (30)]
名前降順: [Tanaka (30), Suzuki (28), Sato (25)]
昇順: [1, 2, 3, 5, 8]
降順: [8, 5, 3, 2, 1]

実務メリット

  • 汎用性: どんな型でも Comparator を渡せばソート可能。
  • 再利用性: 共通ユーティリティとしてプロジェクト全体で使える。
  • テスト容易性: ユーティリティ単位でテストできる。
  • 保守性: ソートロジックを一元管理できる。
Java
スポンサーリンク
シェアする
@lifehackerをフォローする
スポンサーリンク
タイトルとURLをコピーしました