では、初心者向けに 「for → Stream → 集計・変換・フィルタ」 の流れを 図解付きで1枚にまとめるイメージ にします。
初心者向け Stream API 図解フロー
┌──────────┐
│ データ │
│ List / 配列など │
└────┬─────┘
│
▼
┌──────────┐
│ 拡張 for文 │
│ for (x : list) │
│ {処理} │
└────┬─────┘
│
▼
┌──────────┐
│ Stream API │
│ list.stream() │
└────┬─────┘
│
▼
┌─────────────────┐
│ 中間操作(filter/map/sorted) │
│ - filter(x -> 条件) │
│ - map(x -> 変換) │
│ - sorted() │
└────┬────────────┘
│
▼
┌─────────────────┐
│ 末端操作(collect/forEach) │
│ - collect(toList()) │
│ - forEach(処理) │
└────┬────────────┘
│
▼
┌───────────────┐
│ 結果 │
│ List / 出力 / 集計 │
└───────────────┘
例:フィルタ + 変換 + 集計
List<String> names = List.of("Alice", "Bob", "Charlie", "Dave");
// 拡張 for 文
List<String> filtered = new ArrayList<>();
for (String n : names) {
if (n.length() > 3) {
filtered.add(n.toUpperCase());
}
}
// Stream API
List<String> filteredStream = names.stream()
.filter(n -> n.length() > 3) // 条件で抽出
.map(String::toUpperCase) // 大文字に変換
.collect(Collectors.toList()); // List にまとめる
Javaフローで理解すると:
List ["Alice","Bob","Charlie","Dave"]
│
filter(length>3)
│
["Alice","Charlie","Dave"]
│
map(toUpperCase)
│
["ALICE","CHARLIE","DAVE"]
│
collect(toList)
│
結果 → ["ALICE","CHARLIE","DAVE"]
便利な追加ポイント
- 複数条件でフィルタ
.filter(x -> x.length()>3 && x.startsWith("A")) - 集計
.mapToInt(String::length).sum() - グループ化
.collect(Collectors.groupingBy(String::substring(0,1)))
💡 初心者向けコツまとめ
- 順序は「データ → 中間操作 → 末端操作 → 結果」
- 中間操作(filter/map/sorted)は遅延実行
- 末端操作(collect/forEach)で初めて処理が実行される
- 副作用は末端で最小限にする
