如何利用 Stream.iterate() 函数构建斐波那契数列数据流?
- 内容介绍
- 文章标签
- 相关推荐
本文共计1069个文字,预计阅读时间需要5分钟。
关键在于理解 `Stream.iterate(seed, UnaryOperator)` 的签名:
常见错误是试图传入两个独立的初始值,或者把 f 写成只更新单个数字的逻辑,结果流里全是重复值或越界异常。
- 用数组作为状态:种子是
new long[]{0L, 1L},函数返回new long[]{pair[1], pair[0] + pair[1]} - 用 record 更清晰(Java 14+):
record Fib(long a, long b) {},种子为new Fib(0L, 1L),函数返回new Fib(b, a + b) - 别在
f中做边界判断(比如if (a > MAX) break)——iterate()不支持中途终止,得靠后续的limit()或takeWhile()
如何提取每项的“当前斐波那契值”
流中每个元素是状态对象(比如 Fib 或 long[]),但你通常只想要当前项的值(即 a),不是整个状态。
本文共计1069个文字,预计阅读时间需要5分钟。
关键在于理解 `Stream.iterate(seed, UnaryOperator)` 的签名:
常见错误是试图传入两个独立的初始值,或者把 f 写成只更新单个数字的逻辑,结果流里全是重复值或越界异常。
- 用数组作为状态:种子是
new long[]{0L, 1L},函数返回new long[]{pair[1], pair[0] + pair[1]} - 用 record 更清晰(Java 14+):
record Fib(long a, long b) {},种子为new Fib(0L, 1L),函数返回new Fib(b, a + b) - 别在
f中做边界判断(比如if (a > MAX) break)——iterate()不支持中途终止,得靠后续的limit()或takeWhile()
如何提取每项的“当前斐波那契值”
流中每个元素是状态对象(比如 Fib 或 long[]),但你通常只想要当前项的值(即 a),不是整个状态。

