カテゴリ: Java 更新日: 2025/10/16

Javaのラムダ式でforEachifif-else・三項演算子・breakは使える?徹底解説!

【ラムダ式】forEachでif/if-else/三項演算子は使える?breakの可否
【ラムダ式】forEachでif/if-else/三項演算子は使える?breakの可否

先生と生徒の会話形式で理解しよう

生徒

「先生!ラムダ式って便利って聞いたんですけど、forEachif文とかif-else文って使えますか?」

先生

「うん、条件分岐は使えるよ。でも使い方には少しコツがあるんだ。」

生徒

「あと、forEachの途中でbreakしたいときって、できるんですか?」

先生

「良い着眼点だね。ラムダ式では通常のforループと違ってbreakはできないんだ。でも代替案があるから、それも含めて詳しく説明しよう!」

1. JavaのforEachとラムダ式の基本をおさらい

1. Javaの<code>forEach</code>とラムダ式の基本をおさらい
1. JavaのforEachとラムダ式の基本をおさらい

Javaのラムダ式は、匿名関数のように使える便利な書き方です。特にListなどのコレクション操作において、forEachメソッドと組み合わせることで、簡潔なループ処理が可能になります。

例えば、次のように書けます。


List<String> names = Arrays.asList("Tanaka", "Sato", "Suzuki");
names.forEach(name -> System.out.println(name));

このように、従来のforループよりもスッキリと書けるのが魅力です。

2. forEachの中でif文は使える?

2. <code>forEach</code>の中で<code>if</code>文は使える?
2. forEachの中でif文は使える?

ラムダ式の中でも、if文は普通に使えます。条件を満たす要素だけに処理をしたいときに便利です。


names.forEach(name -> {
    if (name.startsWith("T")) {
        System.out.println("Tで始まる名前: " + name);
    }
});

このように、if文を波括弧({ })で囲むことで、複数行の処理も可能です。

3. if-else文も使える?

3. <code>if-else</code>文も使える?
3. if-else文も使える?

はい、if-else文も問題なく使えます。条件によって処理内容を変えたい場合に役立ちます。


names.forEach(name -> {
    if (name.length() > 5) {
        System.out.println("長い名前: " + name);
    } else {
        System.out.println("短い名前: " + name);
    }
});

Javaのラムダ式は、通常のブロックと同様に、ifelseがそのまま使えるため、初心者にも扱いやすい構文です。

4. 三項演算子(条件演算子)は使える?

4. 三項演算子(条件演算子)は使える?
4. 三項演算子(条件演算子)は使える?

もちろん、三項演算子も使用可能です。コードをさらに簡潔にしたいときに便利です。


names.forEach(name -> {
    String type = name.length() > 5 ? "長い" : "短い";
    System.out.println(type + "名前: " + name);
});

三項演算子は、条件 ? 真の処理 : 偽の処理 という形で使います。

5. breakは使える?途中でループを抜けたいときは?

5. <code>break</code>は使える?途中でループを抜けたいときは?
5. breakは使える?途中でループを抜けたいときは?

ここが最大の注意点です。ラムダ式のforEachでは、breakcontinueといったループ制御文が使えません。

以下のようなコードはコンパイルエラーになります:


names.forEach(name -> {
    if (name.equals("Sato")) {
        break; // コンパイルエラー
    }
    System.out.println(name);
});

これは、ラムダ式がブロックスコープ内で実行されるため、ループ制御ができない仕様です。

6. breakしたいならどうする?代替案とは

6. <code>break</code>したいならどうする?代替案とは
6. breakしたいならどうする?代替案とは

どうしてもループの途中で抜けたい場合は、forEachではなく従来のforループやStream APIfilteranyMatchなどを使いましょう。


for (String name : names) {
    if (name.equals("Sato")) {
        break;
    }
    System.out.println(name);
}

また、Streamを使えば柔軟な条件分岐や検索も可能です:


Optional<String> result = names.stream()
    .filter(name -> name.startsWith("S"))
    .findFirst();

result.ifPresent(System.out::println);

findFirst()を使えば、特定条件で1つ見つかった時点で終了できます。

7. 処理の分岐が複雑な場合のコツ

7. 処理の分岐が複雑な場合のコツ
7. 処理の分岐が複雑な場合のコツ

処理が複雑になる場合は、ラムダ式の中にロジックをすべて書くのではなく、メソッドとして切り出すのがおすすめです。


names.forEach(JavaLambdaExample::processName);

public static void processName(String name) {
    if (name.contains("a")) {
        System.out.println("aを含む: " + name);
    } else {
        System.out.println("aを含まない: " + name);
    }
}

こうすれば読みやすく、保守性も高まります。

8. ラムダ式とforEachの使いどころを理解しよう

8. ラムダ式と<code>forEach</code>の使いどころを理解しよう
8. ラムダ式とforEachの使いどころを理解しよう

Javaのラムダ式とforEachを使いこなせると、コードの記述量を減らせて読みやすさが向上します。しかし、すべての処理に適しているわけではなく、breakのような制御が必要なときは別の方法を選びましょう。

Javaのラムダ式に慣れてくると、Streamとの組み合わせでさらに効率的なコードが書けるようになります。

カテゴリの一覧へ
新着記事
Javaのラムダ式で戻り値とvoidの使い方を解説!returnの書き方も完全理解
Javaのメソッド参照とコンストラクタ参照の使い方を完全ガイド!初心者向けに::とClass::newを解説
Javaのラムダ式の書き方を徹底解説!アロー演算子->の基本と使い方
Thymeleafのth:eachの使い方!ループ回数やindexなどの繰り返し処理を学ぼう
人気記事
No.1
Java&Spring記事人気No1
Spring BootとJavaの互換性一覧!3.5/3.4/3.3はJava 21・17に対応してる?
No.2
Java&Spring記事人気No2
Spring Boot JPA入門:エンティティ/リポジトリの基本と作り方
No.3
Java&Spring記事人気No3
Javaの@Validアノテーションを徹底解説!初心者でもわかる入力値検証の基本
No.4
Java&Spring記事人気No4
Springの@Repositoryアノテーションの使い方を徹底解説!初心者でもわかるSpringフレームワークのデータアクセス