考虑以下系列
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 streams有迭代函数来创建这样的流。
一般的语法是 Stream.iterate(0.5,f).limit().forEach(System.out::println);
但我如何访问前一个元素的流?另外,我需要跟踪3的幂的i,有人能帮助吗?我错过了什么吗?
如果我没有理解错的话,你想生成一个流,其中每个元素是前一个元素乘以3。
0.5 1.5 4.5 13.5 40.5 121.5
为了实现这个目标,你不需要像传统的for循环方法那样跟踪流中的前一个元素。
你可以使用 DoubleStream.iterate()
正如你所建议的那样。该方法接受一个 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不是最大值,而是流中的元素数。