逆順処理の比較
では「同じ処理を逆順で書いた場合」の for / foreach / Stream の比較をまとめます。
例題
リストの要素を 逆順 に出力する。
1. for文(従来型)
List<String> names = List.of("Alice", "Bob", "Charlie");
for (int i = names.size() - 1; i >= 0; i--) {
System.out.println(names.get(i));
}
Java- 特徴: インデックスを直接操作できるので逆順が簡単。
- 実務での評価: 最も分かりやすく、誰でも理解できる。
2. foreach文(拡張for)
List<String> names = List.of("Alice", "Bob", "Charlie");
// foreach は逆順に直接対応できないので工夫が必要
List<String> reversed = new ArrayList<>(names);
Collections.reverse(reversed);
for (String name : reversed) {
System.out.println(name);
}
Java- 特徴: foreach 自体は逆順に対応していない。
- 実務での評価:
Collections.reverse()を組み合わせれば安全に書ける。
3. Stream API
List<String> names = List.of("Alice", "Bob", "Charlie");
IntStream.iterate(names.size() - 1, i -> i >= 0, i -> i - 1)
.mapToObj(names::get)
.forEach(System.out::println);
Java- 特徴:
IntStream.iterateを使って逆順のインデックスを生成。 - 実務での評価: 宣言的に書けるが、やや冗長。
まとめ
| 方法 | メリット | デメリット | 実務での使いどころ |
|---|---|---|---|
| for文 | シンプルで直感的、境界条件が明確 | インデックス管理が必要 | 逆順処理の基本形 |
| foreach | 安全で読みやすい | 逆順は直接できない、Collections.reverse が必要 | コレクションを逆順に処理したいとき |
| Stream | 宣言的に書ける、柔軟 | 初心者には読みにくい、少し冗長 | モダンなコードベースや並列処理を意識する場合 |
💡 実務では「逆順処理」は for文が最も分かりやすく安全。
ただし、読みやすさ重視なら foreach + Collections.reverse、モダンな書き方なら Stream という選択肢もあります。


