繁体   English   中英

Java8生成器的无限序列自然数

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM