「データベースから取得した結果を 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 に流せば同じように処理できる。
