我在java 8中练习流,我试图制作一个包含2的倍数的Stream<Integer>
。在一个主类中有几个任务所以我不会链接整个块但是我得到了远是这样的:
Integer twoToTheZeroth = 1;
UnaryOperator<Integer> doubler = (Integer x) -> 2 * x;
Stream<Integer> result = ?;
我的问题可能与流有很大关系,更像是语法,我应该如何使用doubler来获得结果?
提前致谢!
答案 0 :(得分:10)
您可以使用Stream.iterate
。
Stream<Integer> result = Stream.iterate(twoToTheZeroth, doubler);
或直接使用lambda
Stream.iterate(1, x -> 2*x);
第一个参数是&#34;种子&#34; (即流的第一个元素),运算符连续应用每个元素访问。
编辑:
正如Vinay指出的那样,这将导致流最终被填充为0(这是由于int溢出)。为了防止这种情况,可以使用BigInteger
:
Stream.iterate(BigInteger.ONE,
x -> x.multiply(BigInteger.valueOf(2)))
.forEach(System.out::println);
答案 1 :(得分:0)
Arrays.asList(1,2,3,4,5).stream().map(x -> x * x).forEach(x -> System.out.println(x));
因此您可以使用doubler
来电者
map