Java 8中如何使用UnaryOperator生成2的倍数的Stream<Integer>
用UnaryOperator生成2的倍数Stream的解决方案
嘿,这问题很明确,咱们直接从语法层面解决就行!你已经定义了初始值twoToTheZeroth(值为1)和用来翻倍的doubler,正好可以用Java 8 Stream API里的Stream.iterate()方法来生成目标流。
核心代码实现
Stream<Integer> result = Stream.iterate(twoToTheZeroth, doubler);
为什么这么写?
Stream.iterate()在Java 8中的签名是static <T> Stream<T> iterate(T seed, UnaryOperator<T> f),完美匹配你已有的变量类型:- 第一个参数
seed就是你的初始值twoToTheZeroth(也就是1) - 第二个参数
f就是你定义的doubler,它会被反复应用在每个元素上,生成下一个元素(1→2→4→8…)
- 第一个参数
可选:生成有限流
如果你不需要无限流,可以用limit()方法截断,比如只取前5个2的倍数:
Stream<Integer> limitedResult = Stream.iterate(twoToTheZeroth, doubler).limit(5); // 这个流的元素是:1, 2, 4, 8, 16
这样就完全满足你用已定义的doubler生成目标Stream的需求啦!
内容的提问来源于stack exchange,提问作者Minimamut
相关产品推荐
相关产品推荐

