人民医院网络设计与规划:VLAN划分、VRRP冗余与安全域落地拆解
2026/9/30 10:07:34
Stream.iterate(...)是另一种创建无限流的方式。
与generate()不同的是,它不是每次都从零开始生成一个独立的值,而是从一个初始值(seed)开始,通过一个一元操作符(UnaryOperator)不断“推演”出下一个值。
Stream<String>iterated=Stream.iterate("+",s->s+"+");iterated.limit(5L).forEach(System.out::println);+++++++++++++++🧠 解读:
"+";+;.limit(5)截断无限流,只取前 5 个。✅ 适合用于序列、递增值、字符串生成、指数增长等场景。
.limit()!如果不加.limit(),程序会无限运行,不断生成更长的字符串(最终可能崩溃 ⛔)。
Java 9 引入了Stream.iterate(seed, predicate, operator),你可以像写循环一样设置“何时停止”。
Stream<String>iterated=Stream.iterate("+",s->s.length()<=5,s->s+"+");iterated.forEach(System.out::println);输出结果:
+++++++++++++++🧠 解读:
s.length() <= 5时才继续;.limit()。就像一个带判断的while循环!
Stream<Integer>evens=Stream.iterate(0,n->n+2);evens.limit(5).forEach(System.out::println);输出:
02468🎯 每个数字是前一个的 +2,非常适合用于递增逻辑。
| 方法签名 | 用途 |
|---|---|
Stream.iterate(seed, UnaryOperator) | 无限推演序列,需要配合.limit() |
Stream.iterate(seed, predicate, UnaryOperator) | 带终止条件的有限流,无需.limit() |
| 特点 | Stream.generate(...) | Stream.iterate(...) |
|---|---|---|
| 是否依赖前一个元素 | ❌ 否 | ✅ 是 |
| 是否等价于循环 | ❌ 不像循环 | ✅ 类似循环 |
| 是否适合递增/变形 | ❌ 不适合 | ✅ 适合 |
| 是否生成重复值 | ✅ 常用于生成常量 | ❌ 每次不同 |
填空题:
Stream<Integer>squares=Stream.iterate(1,___,n->n*n).limit(3);squares.forEach(System.out::println);❓该写什么逻辑才能输出:
111🤔 答案:
Stream<Integer>squares=Stream.iterate(1,n->true,n->1)