Streams 中級

述語でイテレーションを停止する — ストリーム形式のforループ。

✕ Java 8
Stream.iterate(1, n -> n * 2)
    .limit(10)
    .forEach(System.out::println);
// can't stop at a condition
✓ Java 9+
Stream.iterate(
    1,
    n -> n < 1000,
    n -> n * 2
).forEach(IO::println);
// stops when n >= 1000
このコードに問題がありますか? お知らせください。
🎯

自然な終了

任意の上限ではなく条件で停止します。

📐

forループ相当

for(seed; hasNext; next)と同じセマンティクスです。

🛡️

無限ストリームのリスクなし

述語が終了を保証します。

旧来のアプローチ
iterate + limit
モダンなアプローチ
iterate(シード, 述語, 操作)
JDKバージョン
9
難易度
中級
述語付きStream.iterate()
利用可能

JDK 9(2017年9月)以降、広く利用可能

3引数のStream.iterate(seed, hasNext, next)はforループのように動作します。seedが開始値、hasNextが停止条件、nextが次の値を生成します。

共有 𝕏 🦋 in