では「ジェネリクス対応のユーティリティメソッド」を作ってみましょう。これにより、どんな型のリストでも 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 を渡せばソート可能。
- 再利用性: 共通ユーティリティとしてプロジェクト全体で使える。
- テスト容易性: ユーティリティ単位でテストできる。
- 保守性: ソートロジックを一元管理できる。
