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

Java Java
スポンサーリンク

「データベースから取得した結果を Stream API でソートしてランキング表示」する実務的なサンプルを紹介します。ここでは 社員の名前と点数を持つリストを想定し、Stream API を使ってランキング形式で表示します。


サンプルコード(完全版)

import java.util.*;
import java.util.stream.*;

class Employee {
    private String name;
    private int score;

    public Employee(String name, int score) {
        this.name = name;
        this.score = score;
    }

    public String getName() { return name; }
    public int getScore() { return score; }

    @Override
    public String toString() {
        return name + " : " + score;
    }
}

public class StreamRanking {
    public static void main(String[] args) {
        // データベースから取得した結果を想定(ここでは仮のリスト)
        List<Employee> employees = Arrays.asList(
            new Employee("Tanaka", 85),
            new Employee("Sato", 90),
            new Employee("Suzuki", 70),
            new Employee("Kato", 95),
            new Employee("Ando", 80)
        );

        // Stream API でソート(点数の降順)
        List<Employee> ranking = employees.stream()
            .sorted(Comparator.comparingInt(Employee::getScore).reversed())
            .collect(Collectors.toList());

        // ランキング表示
        System.out.println("=== 社員ランキング(点数順) ===");
        IntStream.range(0, ranking.size())
            .forEach(i -> {
                Employee e = ranking.get(i);
                System.out.println((i + 1) + "位: " + e.getName() + " (" + e.getScore() + ")");
            });
    }
}
Java

実行例

=== 社員ランキング(点数順) ===
1位: Kato (95)
2位: Sato (90)
3位: Tanaka (85)
4位: Ando (80)
5位: Suzuki (70)

応用ポイント

  • 複数キーでソート
    部署 → 点数 → 名前 のように並べたい場合は: .sorted(Comparator.comparing(Employee::getDepartment) .thenComparing(Employee::getScore, Comparator.reverseOrder()) .thenComparing(Employee::getName))
  • トップNだけ表示
    .limit(3) を使えば「トップ3」だけランキング表示可能。
  • DB連携
    実務では JDBC や JPA で取得した List<Entity> をそのまま Stream に流せば同じように処理できる。
Java
スポンサーリンク
シェアする
@lifehackerをフォローする
スポンサーリンク
タイトルとURLをコピーしました