助力软件开发企业降本增效 PHP / java源码系统,只需一次付费,代码终身使用! 广告
### [iterate()](https://lingcoder.gitee.io/onjava8/#/book/14-Streams?id=iterate) `Stream.iterate()`产生的流的第一个元素是种子(iterate方法的第一个参数),然后将种子传递给方法(iterate方法的第二个参数)。方法运行的结果被添加到流(作为流的第二个元素),并存储起来作为下次调用`iterate()`时的第一个参数,以此类推。我们可以利用`iterate()`生成一个斐波那契数列。代码示例: ~~~ // streams/Fibonacci.java import java.util.stream.*; public class Fibonacci { int x = 1; Stream<Integer> numbers() { return Stream.iterate(0, i -> { int result = x + i; x = i; return result; }); } public static void main(String[] args) { new Fibonacci().numbers() .skip(20) // 过滤前 20 个 .limit(10) // 然后取 10 个 .forEach(System.out::println); } } ~~~ 输出结果: ~~~ 6765 10946 17711 28657 46368 75025 121393 196418 317811 514229 ~~~ 斐波那契数列将数列中最后两个元素进行求和以产生下一个元素。`iterate()`只能记忆结果,因此我们需要利用一个变量`x`追踪另外一个元素。 在主方法中,我们使用了一个之前没有见过的`skip()`操作。它根据参数丢弃指定数量的流元素。在这里,我们丢弃了前 20 个元素。