如何访问 Stream 中的先前值

How to access previous value in Stream

考虑以下系列

0.5 1.5 4.5 13.5 40.5 121.5

我们可以使用传统的 for 循环生成此流。比如下面

    float l = 0.5;
    for(int i=1;i<limit;i++)
    {
       if(i == 1 ) System.out.println(l+" ");
       float n = l+Math.pow(3,i-1);
       System.out.println(n+" ");
       l = n;
    }

这段代码效果很好。但是 java 8 个流具有创建此类流的迭代函数。

一般语法是Stream.iterate(0.5,f).limit().forEach(System.out::println);

但是我将如何访问流中的前一个元素?我还需要跟踪 i 的 3 次方。有人可以帮忙吗?我错过了什么吗?

如果我没理解错的话,你想生成一个流,其中每个元素都是前一个元素乘以 3:

0.5 1.5 4.5 13.5 40.5 121.5

为此,您无需像使用传统 for 循环方法那样跟踪流中的前一个元素。

你可以做的是使用 DoubleStream.iterate() as you proposed. The method accepts a DoubleUnaryOperator 作为第二个参数,这是生成流时应用的方法。所以在你的情况下,这将是:

DoubleStream.iterate(0.5, d -> d * 3).limit(6).forEach(System.out::println);

这给出了以下输出:

0.5
1.5
4.5
13.5
40.5
121.5

limit(6) 对于限制流中元素的数量很重要,否则你必须处理无穷大导致流被永远消耗(或者至少直到抛出异常或引发错误) .并不是说参数6不是最大值,而是流中的元素个数。