Java8生成器的自然数无限序列
我用Java8 iterator
为自然数的无限序列( Stream
)定义了natural
。
IntStream natural = IntStream.iterate(0, i -> i + 1); natural .limit(10) .forEach(System.out::println);
现在,我想用Java8 generator
来定义它。
静态流生成(供应商)
什么是最简单的方法? 谢谢。
注意:@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);
使用生成器,您需要跟踪当前索引。 一种方法是:
IntStream natural = IntStream.generate(new AtomicInteger()::getAndIncrement);
注意:我使用AtomicInteger作为可变整数而不是其线程安全性:如果您并行化流,则顺序将不会如预期的那样。
这是内置于IntStream
:
IntStream.range(0, Integer.MAX_VALUE)
这将返回所有值(但不包括) Integer.MAX_VALUE
。