では、先ほどのフローチャートを 実務コード例付きテンプレート として整理しました。
このままコピペで使えて、例外・ログ対応済みの安全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このテンプレートのポイント
- null安全
- 入力リストが
nullでもOptional+orElseで安全に処理開始
- 入力リストが
- 例外処理
- 個別要素の例外をラムダ内で捕捉
- ログ出力済みで処理が途中で止まらない
- 副作用なし
- 外部変数に直接書き込まず、
collect()で結果取得
- 外部変数に直接書き込まず、
- 並列処理対応
parallelStream()を使っても安全- mutable collection への書き込みなし
- null/空文字フィルタ
filter(Objects::nonNull)+filter(!s.isEmpty())で安全にデータ整形
- 加工・変換
map()で純粋関数型スタイルに徹底
- 並べ替え・集計も追加可能
.sorted(),.count(),.sum(),.average()などの組み込みメソッドで容易に集計
💡 応用例
- 部署ごとの人数集計(
groupingBy+counting) - CSV/DBデータの加工後登録
- API呼び出しリスト処理で例外ログ付き安全化
- 並列処理で大量データ処理
このテンプレートを使えば、「例外・副作用・並列・null」すべて安全に扱える Stream 処理の実務標準形になります。

