ミューテーションループに代わるコレクション一括操作
コレクションを直接変換するにはremoveIf()、replaceAll()、List.sort()を使用する。
コード比較
✕ Iterator mutation loop
for (Iterator<Order> it = orders.iterator(); it.hasNext();) {
if (it.next().cancelled()) {
it.remove();
}
}
✓ Java 8+
orders.removeIf(Order::cancelled);
このコードに問題がありますか? お知らせください。
モダンな方法が優れている理由
明確な意図
反復方法ではなく、何を変更するかを操作自体が示します。
より安全な変更
手動でイテレーターから削除する際のルールを回避できます。
少ないコード
一般的な変換を1つの式で記述できます。
旧来のアプローチ
手動イテレーター削除
モダンなアプローチ
Collection.removeIf()
JDKバージョン
8
難易度
初級
JDKサポート
ミューテーションループに代わるコレクション一括操作
利用可能
JDK 8(2014年3月)以降、利用可能
仕組み
モダンなコレクションインターフェースは、一般的な変更操作を直接提供します。removeIf()、replaceAll()、List.sort()などのメソッドにより、制御フローの多いループを、目的とする変換を明示する操作に置き換えられます。
関連ドキュメント
証明