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

时间:2014-10-09 11:32:08

标签: java iterator generator java-8

我使用Java8 natural为自然数的无限序列(Stream)定义了iterator

IntStream natural = IntStream.iterate(0, i -> i + 1);

natural
 .limit(10)
 .forEach(System.out::println);

现在,我想用Java8 generator定义它。

静态流生成(供应商)

最简单的方法是什么?感谢。

3 个答案:

答案 0 :(得分:24)

使用生成器,您需要跟踪当前索引。一种方法是:

IntStream natural = IntStream.generate(new AtomicInteger()::getAndIncrement);

注意:我使用AtomicInteger作为可变整数而不是其线程安全性:如果您并行化流,则顺序将不会如预期那样。

答案 1 :(得分:19)

这内置于$ openssl s_client -connect smtp.gmail.com:587 -starttls smtp < /dev/null connect: Bad file number connect:errno=9

xlApp.Visible = True

这将返回所有值,但不包括Set xlApp = New Excel.Application

答案 2 :(得分:12)

注意:@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)恕我直言的目的:

IntStream natural = IntStream.iterate(0, i -> i + 1);