java中stream.iterate可通过x->x+d实现等差数列,需配合limit或takewhile终止无限流,支持各数值类型但需注意类型一致性。

Java 中 Stream.iterate 本身不直接支持“步长”参数,但可以通过自定义种子和迭代函数来实现等差数列生成,核心是让每次迭代结果 = 上一次结果 + 公差(步长)。
基础用法:用 iterate 生成等差数列
Stream.iterate 接收两个参数:初始值(seed)和一个 UnaryOperator<t></t> 类型的迭代函数,该函数决定下一个元素如何由当前元素计算得出。等差数列的本质就是“后项 = 前项 + d”,所以迭代函数写成 x -> x + d 即可。
例如生成从 1 开始、公差为 3 的等差数列前 5 项:
Stream.iterate(1, x -> x + 3)
.limit(5)
.forEach(System.out::println);
// 输出:1 4 7 10 13
注意终止条件:必须搭配 limit 或 takeWhile
iterate 默认生成无限流,不加限制会一直运行。常见做法是:
Java JDK 25 来自 OpenJDK 官方归档,版本为 JDK 25,本条下载地址已指向官方 Windows x64 zip 安装包直链,适合调试旧项目或兼容旧版 Java 运行环境。
-
按数量截取:用
limit(n)获取前 n 项 -
按条件截取:用
takeWhile(x -> x (Java 9+)获取不超过某上限的项 - 避免用 forEach 无限制遍历,否则会死循环
生成指定范围的等差数列(含起止)
比如生成 [10, 30] 范围内、步长为 4 的整数序列(即 10, 14, 18, 22, 26, 30):
int start = 10, step = 4, end = 30;
Stream.iterate(start, x -> x + step)
.takeWhile(x -> x
<p>注意:如果 <code>start > end</code> 且 <code>step > 0</code>,<code>takeWhile</code> 会立即结束,流为空;若需支持递减数列,确保 <code>step</code> 为负,并调整条件为 <code>x >= end</code>。</p>
<h3>泛型与类型安全提示</h3>
<p><code>iterate</code> 是泛型方法,推断类型依赖于 seed。若需 long、double 等类型,显式指定 seed 类型更稳妥:</p>
-
Stream.iterate(1L, x -> x + 5L)→ long 流 -
Stream.iterate(0.0, x -> x + 0.5)→ double 流 - 避免混用 int 和 long(如
1和x + 5L),可能触发装箱或编译错误
不复杂但容易忽略
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










