はじめに
前回まででfor文の基本やネスト、制御テクニックを学んできたけど、
今回はその“先”のお話。実務になると、for文だけじゃちょっと書きづらい場面が
出てくるんだ。そんなときのために、「for文の限界」と、
その先にあるJava Stream
の世界をのぞいてみよう。
1. for文の苦手ポイント
for文は、
- 配列や
List
を順に処理するのは得意。
(特に、条件に合うものを探すといった単純な繰り返しは得意)
しかし実務では、ネストが深くなって読みにくくなる。
(ifやbreakが増えて迷路みたいになる) - 加工→抽出→集計みたいな一連処理をスッキリ書きにくい
なんてことが起こる。
2. ラベル付きbreak
でネストから脱出
二重ループをまとめて抜けたいときはこう書ける。
outer:
for (int i = 0; i < 3; i++) {
for (int j = 0; j < 3; j++) {
if (i == 1 && j == 1) {
System.out.println("条件クリア!外側ループごと抜けます");
break outer;
}
}
}
outer:
でラベルを付け、break outer;
で外側ごと抜けられる。
ただし、やりすぎると読みづらくなるので注意。
3. for文でモヤっとする場面
「名前が“ピ”で始まるポケモンを探して、昇順に並べ、3件だけ表示」
これをfor文で書くと:
List<String> result = new ArrayList<>();
for (String name : pokemonList) {
if (name.startsWith("ピ")) {
result.add(name);
}
}
Collections.sort(result);
for (int i = 0; i < Math.min(3, result.size()); i++) {
System.out.println(result.get(i));
}
抽出・並べ替え・制限がバラバラで、全体の流れが見えづらい。
4. Java Streamに触ってみよう
Java 8以降ならこう書ける:
pokemonList.stream()
.filter(name -> name.startsWith("ピ"))
.sorted()
.limit(3)
.forEach(System.out::println);
-
.filter()
:条件に合うものだけ残す -
.sorted()
:並び替え -
.limit(3)
:先頭3件まで -
.forEach()
:処理を実行
上から下へ、やりたいことがそのまま流れとして読めるのが魅力。
5. 実務での使い分けヒント
ケース | for文 | Stream |
---|---|---|
単純な繰り返し | ◎ | ○ |
条件やネストが複雑 | △ | ◎ |
加工や集計が多い | △ | ◎ |
とにかく速さ優先 | ◎ | △ |
6. まとめ
- for文はシンプルな処理に強い
- Streamは加工や抽出、集計をまとめて読みやすく書ける
- 「読みやすさ」か「性能」か、状況に合わせて選ぼう
あとがき
ここまで読んでくれて、本当にありがとうございました。
「プログラミングって難しい…」って思ってた人も、
「ちょっと楽しいかも…!」って思ってもらえたらうれしいな。
次の投稿も、よろしくおねがいします。
💬 コメント・フィードバック歓迎!
「この章わかりやすかった!」
「これ表現まちがってない?」
「次は○○をやってほしい!」などなど、
お気軽にコメントで教えてくださいね!