Если я вас правильно понял, вы хотите сгенерировать поток, в котором каждый элемент является предыдущим, умноженным на 3:
0,5 1,5 4,5 13,5 40,5 121,5
To для этого вам не нужно отслеживать предыдущий элемент в потоке, как если бы вы делали это с традиционным для l oop подходом.
Что вы могли бы сделать, так это использовать 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 - это не максимальное значение, а количество элементов в потоке.