[英]Infinite sequence of Natural numbers with Java8 generator
我用Java8 iterator
为自然数的无限序列( Stream
)定义了natural
。
IntStream natural = IntStream.iterate(0, i -> i + 1);
natural
.limit(10)
.forEach(System.out::println);
现在,我想用Java8 generator
定义它。
静态流生成(供应商)
什么是最简单的方法? 谢谢。
使用生成器,您需要跟踪当前索引。 一种方法是:
IntStream natural = IntStream.generate(new AtomicInteger()::getAndIncrement);
注意:我使用AtomicInteger作为可变整数而不是其线程安全性:如果您并行化流,则顺序将不会如预期的那样。
这是内置于IntStream
:
IntStream.range(0, Integer.MAX_VALUE)
这将返回所有值(但不包括) Integer.MAX_VALUE
。
注意:@assylias使用AtomicInteger
设法使用lambda。 他应该得到接受的答案。
我不确定你能用lambda做到这一点(因为它是有状态的),但是对于一个简单的Supplier
这将有效:
IntSupplier generator = new IntSupplier() {
int current = 0;
public int getAsInt() {
return current++;
}
};
IntStream natural = IntStream.generate(generator);
但是, 我非常喜欢你当前的解决方案 ,因为这是iterate(int seed, IntUnaryOperator f)
的目的iterate(int seed, IntUnaryOperator f)
恕我直言:
IntStream natural = IntStream.iterate(0, i -> i + 1);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.