実務で使う拡張 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 を使うほうが良い |
| 要素の削除・置換を含む処理 | ★☆☆☆☆ | Iterator や ListIterator 向き |
