Java | Stream API 安全設計ベストプラクティス(例外・ログ対応)

Java Java
スポンサーリンク

では、先ほどのフローチャートを 実務コード例付きテンプレート として整理しました。
このままコピペで使えて、例外・ログ対応済みの安全Stream処理の完全版です。


安全Stream処理テンプレート(実務コード付き)

import java.util.*;
import java.util.stream.*;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

public class SafeStreamExample {

    private static final Logger logger = LoggerFactory.getLogger(SafeStreamExample.class);

    // サンプル処理メソッド(例:外部API呼び出しや計算)
    private static String process(String s) throws Exception {
        if (s.contains("error")) throw new Exception("Simulated failure");
        return s.toUpperCase();
    }

    public static void main(String[] args) {
        List<String> inputList = Arrays.asList("apple", "banana", "error", "cherry", null);

        // ===============================
        // 安全Stream処理テンプレート
        // ===============================
        List<String> processed = Optional.ofNullable(inputList) // 1. null安全
                .orElse(Collections.emptyList())
                .parallelStream()                              // 2. 並列処理も可能
                .map(s -> {                                    // 3. 例外処理ラップ
                    try {
                        return process(s);
                    } catch (Exception e) {
                        logger.error("処理失敗: {}", s, e);
                        return null;
                    }
                })
                .filter(Objects::nonNull)                     // 4. null除去
                .map(String::trim)                             // 5. データ加工(例:空白除去)
                .filter(s -> !s.isEmpty())                     // 6. 条件抽出(空文字除外)
                .sorted()                                      // 7. 並べ替え(自然順序)
                .collect(Collectors.toList());                // 8. 結果収集

        // 9. 出力・画面表示・DB登録
        processed.forEach(System.out::println);
    }
}
Java

このテンプレートのポイント

  1. null安全
    • 入力リストが null でも Optional + orElse で安全に処理開始
  2. 例外処理
    • 個別要素の例外をラムダ内で捕捉
    • ログ出力済みで処理が途中で止まらない
  3. 副作用なし
    • 外部変数に直接書き込まず、collect() で結果取得
  4. 並列処理対応
    • parallelStream() を使っても安全
    • mutable collection への書き込みなし
  5. null/空文字フィルタ
    • filter(Objects::nonNull) + filter(!s.isEmpty()) で安全にデータ整形
  6. 加工・変換
    • map() で純粋関数型スタイルに徹底
  7. 並べ替え・集計も追加可能
    • .sorted(), .count(), .sum(), .average() などの組み込みメソッドで容易に集計

💡 応用例

  • 部署ごとの人数集計(groupingBy + counting
  • CSV/DBデータの加工後登録
  • API呼び出しリスト処理で例外ログ付き安全化
  • 並列処理で大量データ処理

このテンプレートを使えば、「例外・副作用・並列・null」すべて安全に扱える Stream 処理の実務標準形になります。

Java
スポンサーリンク
シェアする
@lifehackerをフォローする
スポンサーリンク
タイトルとURLをコピーしました