変更不可能なコレクター
stream.toList()で変更不可能なリストに直接収集する。
コード比較
✕ Java 8
List<String> list = stream.collect(
Collectors.collectingAndThen(
Collectors.toList(),
Collections::unmodifiableList
)
);
✓ Java 16+
List<String> list = stream.toList();
このコードに問題がありますか? お知らせください。
モダンな方法が優れている理由
最短の記法
stream.toList()はcollect()もCollectorsのインポートも不要です。
不変
結果は変更できず、意図しない変更を防ぎます。
読みやすい
ストリームパイプラインの終端ステップとして自然に読めます。
旧来のアプローチ
collectingAndThen
モダンなアプローチ
stream.toList()
JDKバージョン
16
難易度
中級
JDKサポート
変更不可能なコレクター
利用可能
JDK 16(2021年3月)以降、広く利用可能
仕組み
Java 10ではcollectingAndThenの冗長なラッパーを置き換えるtoUnmodifiableList()、toUnmodifiableSet()、toUnmodifiableMap()が追加されました。特にリストについては、Java 16のstream.toList()がさらにシンプルな代替手段を提供します。collect()の呼び出しも不要です。他のコレクション型にはtoUnmodifiableSet()やtoUnmodifiableMap()を使用してください。
関連ドキュメント