如何访问流中的前值

问题描述 投票:0回答:1

考虑以下系列

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,有人能帮助吗?我错过了什么吗?

java java-stream series
1个回答
4
投票

如果我没有理解错的话,你想生成一个流,其中每个元素是前一个元素乘以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不是最大值,而是流中的元素数。

© www.soinside.com 2019 - 2024. All rights reserved.