java stream.iterate用于生成无限流,需配合limit等终止操作;支持等差数列、斐波那契等规律序列,推荐用record封装状态,jdk9+可用takewhile自然终止,复杂场景宜用intstream替代。

Java Stream.iterate 是生成无限流的常用方式,适合按固定规律生成序列,比如斐波那契数列、等差/等比数列、递增ID、时间戳序列等。它不依赖集合,而是靠种子值和迭代函数持续推导下一个元素。
基本用法:iterate(seed, unaryOperator)
最简形式是 Stream.iterate(seed, nextFunction),其中:
- seed:起始值(流的第一个元素)
-
nextFunction:一个
UnaryOperator<t></t>,接收上一个元素,返回下一个元素
该方法默认生成**无限流**,必须配合 limit()、takeWhile() 或 findFirst() 等终止操作使用,否则执行会卡住。
生成等差数列(如:0, 2, 4, 6, ...)
用加法构造规律:
Java JDK 25 来自 OpenJDK 官方归档,版本为 JDK 25,本条下载地址已指向官方 Windows x64 zip 安装包直链,适合调试旧项目或兼容旧版 Java 运行环境。
Stream.iterate(0, n -> n + 2)
.limit(5)
.forEach(System.out::println); // 输出:0 2 4 6 8
生成斐波那契数列(0, 1, 1, 2, 3, 5, ...)
需用对象封装两个状态。推荐用 record 或自定义类,例如:
record FibPair(long a, long b) {
long next() { return a; }
FibPair nextStep() { return new FibPair(b, a + b); }
}
<p>Stream.iterate(new FibPair(0, 1), FibPair::nextStep)
.map(FibPair::next)
.limit(10)
.forEach(System.out::print); // 0 1 1 2 3 5 8 13 21 34</p>
带终止条件:用 takeWhile 控制自然结束
JDK 9+ 支持 takeWhile,适合“小于某值就停止”的场景:
Stream.iterate(1, n -> n * 2)
.takeWhile(n -> n <p>注意:<code>takeWhile</code> 在首个不满足条件时**立即停止**,不会消费后续元素。</p><h3>注意事项与避坑点</h3>
- 避免在
nextFunction中抛异常或返回 null(除非你明确处理),否则流会中断并抛NullPointerException或其他异常 - 不要直接打印无限流,如
Stream.iterate(1, i->i+1).forEach(...)会导致死循环 - 若需索引参与计算(如第 n 项 = n²),建议改用
IntStream.range(0, n).mapToObj(i -> i*i),更直观安全 - 对复杂状态,优先封装成不可变对象,保证线程安全和逻辑清晰
大量免费API接口:立即使用
涵盖生活服务API、金融科技API、企业工商API、等相关的API接口服务。免费API接口可安全、合规地连接上下游,为数据API应用能力赋能!










