では、「map / filter / sorted / groupingBy」を図解で直感的に理解する教材を作ります。
文章だけでなく、処理の流れを矢印で表す図解スタイルで解説します。
1. filter() — 条件で絞り込み
入力リスト: [1, 2, 3, 4, 5]
filter(x -> x % 2 == 0)
│
▼
出力リスト: [2, 4]
- 意味:条件に合う要素だけ残す
- 使いどころ:条件抽出(例:売上100以上、在庫が0でない商品など)
List<Integer> nums = List.of(1,2,3,4,5);
List<Integer> evens = nums.stream()
.filter(x -> x % 2 == 0)
.toList();
Java2. map() — 要素を変換
入力リスト: ["alice", "bob", "charlie"]
map(name -> name.toUpperCase())
│
▼
出力リスト: ["ALICE", "BOB", "CHARLIE"]
- 意味:各要素を別の値に変換
- 使いどころ:文字列加工、DTO変換、数値計算など
List<String> names = List.of("alice", "bob", "charlie");
List<String> upper = names.stream()
.map(String::toUpperCase)
.toList();
Java3. sorted() — 並び替え
入力リスト: [5, 2, 9, 1]
sorted()
│
▼
出力リスト: [1, 2, 5, 9]
または
sorted(Comparator.reverseOrder())
│
▼
出力リスト: [9, 5, 2, 1]
- 意味:昇順・降順に並び替え
- 使いどころ:ランキング表示、日付順、スコア順
List<Integer> nums = List.of(5,2,9,1);
List<Integer> sorted = nums.stream()
.sorted()
.toList();
Java4. groupingBy() — グループ分け(集計)
入力リスト: ["Alice:DeptA", "Bob:DeptB", "Charlie:DeptA"]
groupingBy(department)
│
▼
出力マップ:
DeptA → ["Alice", "Charlie"]
DeptB → ["Bob"]
- 意味:特定のキーで分類して Map にまとめる
- 使いどころ:部署ごとの人数集計、カテゴリ別データ集計
class Employee {
String name;
String dept;
Employee(String n, String d){ name = n; dept = d; }
}
List<Employee> employees = List.of(
new Employee("Alice","DeptA"),
new Employee("Bob","DeptB"),
new Employee("Charlie","DeptA")
);
Map<String, List<Employee>> grouped = employees.stream()
.collect(Collectors.groupingBy(e -> e.dept));
Java5. 全体イメージ(処理の流れ)
入力リスト
│
├─ filter() → 条件で絞り込み
│
├─ map() → 要素を変換
│
├─ sorted() → 並び替え
│
└─ collect() → リストやマップにまとめる
groupingBy()は collect の中で分類- 矢印の流れで「左から右へ処理が順に流れる」と考えると理解しやすい
覚え方のコツ
| メソッド | キーワード |
|---|---|
| filter | 選ぶ(条件に合うものだけ) |
| map | 変える(加工・変換) |
| sorted | 並べる(昇順・降順) |
| groupingBy | まとめる(グループ分け) |
- 流れ順に覚えると自然:
- filter(選ぶ)
- map(変える)
- sorted(並べる)
- collect / groupingBy(まとめる)
💡 実務イメージ例
- 売上データ:filter → 条件絞り込み(売上>100)
- 商品名:map → 大文字化
- 売上日:sorted → 日付順に並べ替え
- 部署別:groupingBy → 集計表作成

