Java | 「for文 → Stream API」構文変換チートシート

Java Java
スポンサーリンク

以下は、Java の「for文 → Stream API」構文変換チートシートです。
プログラミング初心者でも直感的に理解できるように、
「目的別」で並べ、Before(for) / After(Stream) / 解説 の3列構成にしています。


Java for文 → Stream API 変換チートシート

目的for文(従来の書き方)Stream API(モダンな書き方)ポイント解説
① 全件ループjava<br>for (String s : list) {<br> System.out.println(s);<br>}java<br>list.forEach(System.out::println);forEach() は基本ループの代替。副作用(外部変更)は最小限に。
② 条件付き処理(if)java<br>for (String s : list) {<br> if (s.length() > 3) {<br> System.out.println(s);<br> }<br>}java<br>list.stream()<br> .filter(s -> s.length() > 3)<br> .forEach(System.out::println);filter() で条件を明示化。ネストを浅くできる。
③ 条件抽出+新リスト作成java<br>List<String> result = new ArrayList<>();<br>for (String s : list) {<br> if (s.length() > 3) {<br> result.add(s);<br> }<br>}java<br>List<String> result = list.stream()<br> .filter(s -> s.length() > 3)<br> .collect(Collectors.toList());collect(toList()) でリスト再構築。
④ 要素の変換(加工)java<br>List<String> upper = new ArrayList<>();<br>for (String s : list) {<br> upper.add(s.toUpperCase());<br>}java<br>List<String> upper = list.stream()<br> .map(String::toUpperCase)<br> .collect(Collectors.toList());map() は「変換」を表す。
⑤ 条件付き加工java<br>List<String> result = new ArrayList<>();<br>for (String s : list) {<br> if (s.length() > 3) {<br> result.add(s.toUpperCase());<br> }<br>}java<br>List<String> result = list.stream()<br> .filter(s -> s.length() > 3)<br> .map(String::toUpperCase)<br> .collect(Collectors.toList());filter→map→collect は黄金パターン。
⑥ 集計(件数)java<br>int count = 0;<br>for (String s : list) {<br> if (s.startsWith("A")) count++;<br>}java<br>long count = list.stream()<br> .filter(s -> s.startsWith("A"))<br> .count();count() で件数取得。
⑦ 並べ替えjava<br>List<String> sorted = new ArrayList<>(list);<br>Collections.sort(sorted);java<br>List<String> sorted = list.stream()<br> .sorted()<br> .collect(Collectors.toList());sorted() は自然順序。独自順序は Comparator を渡す。
⑧ グループ化(手動で Map に分類)java<br>Map<String, List<User>> grouped = users.stream()<br> .collect(Collectors.groupingBy(User::getDept));groupingBy() で分類処理が一行に。
⑨ 重複削除java<br>Set<String> set = new HashSet<>();<br>for (String s : list) {<br> set.add(s);<br>}java<br>List<String> distinct = list.stream()<br> .distinct()<br> .collect(Collectors.toList());distinct() で簡単にユニーク化。
⑩ ページング(件数制限)java<br>int limit = 5;<br>for (int i = 0; i < limit && i < list.size(); i++) {<br> System.out.println(list.get(i));<br>}java<br>list.stream()<br> .limit(5)<br> .forEach(System.out::println);limit() で先頭N件を取得。
⑪ スキップ(途中から)java<br>for (int i = 10; i < list.size(); i++) {<br> System.out.println(list.get(i));<br>}java<br>list.stream()<br> .skip(10)<br> .forEach(System.out::println);ページング処理で2ページ目以降に便利。
⑫ ネストリストの展開java<br>List<String> result = new ArrayList<>();<br>for (List<String> inner : listOfLists) {<br> result.addAll(inner);<br>}java<br>List<String> result = listOfLists.stream()<br> .flatMap(List::stream)<br> .collect(Collectors.toList());flatMap() で List<List> → List に変換。

Stream 化の基本ルール

手順目的メソッド例
1️⃣ Streamを作るlist.stream()配列なら Arrays.stream(arr)
2️⃣ 処理をつなげるfilter, map, sorted, …データの加工や選別
3️⃣ 結果をまとめるcollect(toList()), count(), findFirst()結果を得る(終端操作)

実務ベストプラクティス

観点ベストプラクティス注意点
副作用の回避可能な限り .map().filter() で完結外部リストへ add() するのは避ける
null安全Optional.ofNullable(list).orElse(Collections.emptyList())null.stream() は例外になる
パフォーマンス大量データでは .parallelStream() 検討ただし順序が保証されない点に注意
デバッグ.peek(System.out::println)Streamの途中結果を確認できる

まとめ図:for文 → Stream 化フロー

for文構造:
┌── for (要素 : コレクション)
│     ├─ 条件 (if)
│     └─ 処理・追加
└── 結果(Listなど)

↓ Streamに変換 ↓

list.stream()
    .filter(...)
    .map(...)
    .collect(Collectors.toList());

Java
スポンサーリンク
シェアする
@lifehackerをフォローする
スポンサーリンク
タイトルとURLをコピーしました