代码对比
✕ 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
发现此代码有问题? 告诉我们。
为什么现代方式更好
自然终止
根据条件停止,而非任意 limit。
for 循环的流形式
for(int i=0; i<10; i++) 对应的流形式。
可链式调用
与 map、filter 等其他流操作链式调用。
旧方式
iterate + limit
现代方式
iterate(seed, pred, op)
自 JDK
9
难度
中级
JDK 支持
带谓词的 Stream.iterate()
可用
自 JDK 9 起广泛可用(2017 年 9 月)
工作原理
三参数 Stream.iterate(seed, hasNext, next) 像 for 循环一样工作:从种子值开始,在谓词成立时继续,并按步骤函数递进。
相关文档