インクリメントを使わないモダンな書き方
では「インクリメント/デクリメントを使わずに済ませる、よりモダンで安全な書き方」を紹介します。
1. 拡張 for文(foreach)
配列やリストを順番に処理するなら、インデックス管理すら不要。
List<String> names = List.of("Alice", "Bob", "Charlie");
for (String name : names) {
System.out.println(name);
}
Java- メリット: インクリメント不要、範囲外アクセスの心配なし
- 実務で褒められるポイント: 「シンプルで安全」「意図が明確」
2. Iterator を使う
コレクションを順番に処理する標準的な方法。
List<Integer> numbers = List.of(10, 20, 30);
Iterator<Integer> it = numbers.iterator();
while (it.hasNext()) {
System.out.println(it.next());
}
Java- メリット: インクリメント不要、内部で安全に次の要素へ進む
- 実務で褒められるポイント: 「コレクション操作に強い」「削除操作も安全にできる」
3. Stream API(Java 8以降)
より宣言的に「何をしたいか」を書ける。
List<String> names = List.of("Alice", "Bob", "Charlie");
names.stream()
.filter(n -> n.startsWith("A"))
.forEach(System.out::println);
Java- メリット: インクリメントやループ制御を意識しなくてよい
- 実務で褒められるポイント: 「モダンで読みやすい」「並列処理にも対応」
4. IntStream.range を使う
インデックスが必要な場合でも、インクリメントを直接書かずに済む。
List<String> names = List.of("Alice", "Bob", "Charlie");
IntStream.range(0, names.size())
.forEach(i -> System.out.println(i + ": " + names.get(i)));
Java- メリット: 境界条件ミス(<= と < の間違い)を防げる
- 実務で褒められるポイント: 「境界条件が明確」「バグが入りにくい」
5. forEach メソッド
コレクションに直接処理を渡す。
List<Integer> numbers = List.of(1, 2, 3);
numbers.forEach(n -> System.out.println(n * 2));
Java- メリット: インクリメント不要、ラムダ式で直感的
- 実務で褒められるポイント: 「簡潔で意図が伝わりやすい」
まとめ
- foreach → インデックス不要なら最適
- Iterator → コレクションを安全に操作
- Stream API → 宣言的でモダンな書き方
- IntStream.range → インデックスが必要でも安全
- forEach → コレクションに直接処理を渡せる
💡 実務では「インクリメントを正しく使えるか」よりも「インクリメントを書かなくても済む方法を選べるか」が評価されます。
つまり、“インクリメントを隠す”のがモダンJavaの流儀なんです。

