如何访问 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不是最大值,而是流中的元素个数。
考虑以下系列
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不是最大值,而是流中的元素个数。