Stream takeWhile / dropWhile
述語に基づいてストリームの要素を取得またはスキップする。
コード比較
✕ Java 8
List<Integer> result = new ArrayList<>();
for (int n : sorted) {
if (n >= 100) break;
result.add(n);
}
// no stream equivalent in Java 8
✓ Java 9+
var result = sorted.stream()
.takeWhile(n -> n < 100)
.toList();
// or: .dropWhile(n -> n < 10)
このコードに問題がありますか? お知らせください。
モダンな方法が優れている理由
ショートサーキット
述語が失敗した時点で処理を停止します。
パイプライン対応
他のストリーム操作と自然に連鎖できます。
宣言的
takeWhileは「100未満の間取得する」と英語のように読めます。
旧来のアプローチ
手動ループ
モダンなアプローチ
takeWhile/dropWhile
JDKバージョン
9
難易度
初級
JDKサポート
Stream takeWhile / dropWhile
利用可能
JDK 9(2017年9月)以降、広く利用可能
仕組み
takeWhile()は述語が真の間は要素を返し、最初に偽になった時点で停止します。dropWhile()は真の間は要素をスキップし、残りを返します。いずれも順序付きストリームで最も効果的です。
関連ドキュメント