for文 vs foreach / Stream の使い分け
では「実務で for文 と foreach/Stream をどう使い分けるか」の判断基準を整理します。
1. インデックスが必要かどうか
- 必要な場合 → for文
for (int i = 0; i < list.size(); i++) {
System.out.println(i + ": " + list.get(i));
}
Javaインデックス番号を使って処理したいとき(例: 行番号付き出力、隣の要素との比較など)。
- 不要な場合 → foreach / Stream
for (String name : list) {
System.out.println(name);
}
Java要素そのものだけを処理するなら foreach が最適。
2. 処理が単純か複雑か
- 単純な繰り返し → foreach
- 読みやすく、バグが入りにくい。
- 条件付きや複雑な処理 → Stream
list.stream()
.filter(s -> s.startsWith("A"))
.map(String::toUpperCase)
.forEach(System.out::println);
Java条件や変換を「宣言的」に書ける。
3. パフォーマンスや制御が必要か
- 細かい制御(break, continue, インデックス操作) → for文
for (int i = 0; i < list.size(); i++) {
if (list.get(i).equals("STOP")) break;
System.out.println(list.get(i));
}
Java- 並列処理やデータ変換 → Stream
list.parallelStream()
.filter(s -> s.length() > 3)
.forEach(System.out::println);
Java4. 可読性・チーム開発の観点
- for文: 誰でも理解できる基本形。
- foreach: シンプルで安全、レビューで好まれる。
- Stream: 慣れているチームなら強力だが、初心者には読みにくいこともある。
5. 実務での判断フロー
- インデックスが必要?
→ Yes → for文
→ No → foreach / Stream - 処理が単純?
→ Yes → foreach
→ No(条件や変換が多い) → Stream - 並列処理や高度な操作が必要?
→ Yes → Stream
→ No → foreach
まとめ
- for文 → インデックスが必要、細かい制御が必要なとき
- foreach → 要素を順に処理するだけのとき
- Stream → 条件・変換・並列処理などを宣言的に書きたいとき
💡 実務では「まず foreach、必要なら for、もっと複雑なら Stream」という順番で選ぶと安全です。


