Java | 拡張for文(for-each文)

Java Java
スポンサーリンク

実務で使う拡張 for 文サンプル集

了ここでは、「拡張 for 文(for-each)」を実務でどう使うかに焦点を当てて、現場でよく出る3つのシチュエーションを紹介します。

それぞれ「コード例 → 処理の流れ → 実務ポイント」をセットで説明します。


サンプル①:データ一覧を出力(ログ・レポート生成など)

✅ 例:社員リストを順に出力

import java.util.List;

public class EmployeePrinter {
    public static void main(String[] args) {
        List<String> employees = List.of("Suzuki", "Tanaka", "Sato");

        System.out.println("=== 社員一覧 ===");
        for (String name : employees) {
            System.out.println("- " + name);
        }
    }
}
Java

🔍 実務での使いどころ

  • DBから取得した一覧を出力(ログ・CSV・画面表示など)
  • 配列や List の内容をテンプレートに埋め込む

💡ポイント

  • 単純な出力・ログ用途では for-each のほうが読みやすく、誤操作も少ない。
  • List.of() のような不変リストも安全に走査可能。

サンプル②:リスト内データを加工して新リストを生成(実務頻出)

✅ 例:ユーザー入力から空文字を除外し、整形

import java.util.ArrayList;
import java.util.List;

public class CleanInputExample {
    public static void main(String[] args) {
        List<String> rawInputs = List.of("Alice", "", "  Bob  ", "   ", "Charlie");
        List<String> cleaned = new ArrayList<>();

        for (String s : rawInputs) {
            String trimmed = s.trim();
            if (!trimmed.isEmpty()) {
                cleaned.add(trimmed);
            }
        }

        System.out.println("入力結果: " + cleaned);
    }
}
Java

出力:

入力結果: [Alice, Bob, Charlie]

💡ポイント

  • 「入力データをきれいにして次の処理へ渡す」ような実務処理に最適。
  • 拡張 for読み専用 なので、「取り出して新しいリストを作る」スタイルが安全です。

サンプル③:API結果やDB結果の加工・検証処理

✅ 例:商品リストを走査して在庫切れを検出

import java.util.List;

class Product {
    String name;
    int stock;

    Product(String name, int stock) {
        this.name = name;
        this.stock = stock;
    }
}

public class InventoryChecker {
    public static void main(String[] args) {
        List<Product> products = List.of(
            new Product("ノートPC", 5),
            new Product("マウス", 0),
            new Product("キーボード", 2)
        );

        boolean hasOutOfStock = false;
        for (Product p : products) {
            if (p.stock == 0) {
                System.out.println("[警告] 在庫切れ: " + p.name);
                hasOutOfStock = true;
            }
        }

        if (!hasOutOfStock) {
            System.out.println("すべて在庫あり。");
        }
    }
}
Java

出力例:

[警告] 在庫切れ: マウス

💡ポイント

  • 拡張 forオブジェクトリスト(DTOやEntity) にもよく使われる。
  • 在庫確認やステータス検証など、「チェック系ロジック」に相性が良い。

サンプル④:ログ出力+例外処理付き(実務の堅牢版)

✅ 例:外部APIを順に呼び出して、失敗をログに出す

import java.util.List;

public class ApiCaller {
    public static void main(String[] args) {
        List<String> urls = List.of(
            "https://api.example.com/user",
            "https://api.example.com/order",
            "https://api.example.com/item"
        );

        for (String url : urls) {
            try {
                callApi(url);
            } catch (Exception e) {
                System.err.println("[ERROR] " + url + " の呼び出しに失敗: " + e.getMessage());
            }
        }

        System.out.println("すべてのAPI呼び出し完了。");
    }

    static void callApi(String url) throws Exception {
        if (url.contains("order")) {
            throw new Exception("タイムアウト");
        }
        System.out.println("成功: " + url);
    }
}
Java

出力例:

成功: https://api.example.com/user
[ERROR] https://api.example.com/order の呼び出しに失敗: タイムアウト
成功: https://api.example.com/item
すべてのAPI呼び出し完了。

💡ポイント

  • 拡張 for はエラー処理(try/catch)を中に書けるので便利。
  • 各ループで独立した処理を行うタイプ(API呼び出し・ファイル処理など)に最適。
  • continue / break も使える。

サンプル⑤:ネスト処理(2段階ループ)

実務で「親リスト × 子リスト」を処理するケース(例:部署ごとの社員)も多いです。

import java.util.List;

public class DepartmentExample {
    public static void main(String[] args) {
        List<List<String>> departments = List.of(
            List.of("佐藤", "鈴木"),
            List.of("田中"),
            List.of("高橋", "山田", "伊藤")
        );

        int deptNo = 1;
        for (List<String> members : departments) {
            System.out.println("部署 " + deptNo + ":");
            for (String m : members) {
                System.out.println(" - " + m);
            }
            deptNo++;
        }
    }
}
Java

出力:

部署 1:
 - 佐藤
 - 鈴木
部署 2:
 - 田中
部署 3:
 - 高橋
 - 山田
 - 伊藤

💡ポイント

  • 拡張 for のネストで2次元リスト・多階層データを自然に扱える。
  • 親子構造(部門→社員、会社→店舗など)の集計処理に非常に使われます。

実務的まとめ(for-each の使い所)

シーンおすすめ度理由
一覧出力(ログ、画面表示)★★★★★コードが短く、安全で可読性高い
データ加工・フィルタリング★★★★★走査しながら新リスト生成に最適
集計処理(合計・最大値など)★★★★☆シンプルでバグが少ない
インデックス指定が必要な処理★★☆☆☆通常の for を使うほうが良い
要素の削除・置換を含む処理★☆☆☆☆IteratorListIterator 向き
タイトルとURLをコピーしました