Бесконечная последовательность натуральных чисел с генератором Java8
я определил natural
для бесконечной последовательности (Stream
) натуральных чисел с Java8 iterator
.
IntStream natural = IntStream.iterate(0, i -> i + 1);
natural
.limit(10)
.forEach(System.out::println);
теперь я хочу определить его с помощью Java8 generator
.
статический поток генерирует (поставщик s)
что было бы самым простым способом? Спасибо.
3 ответов
Примечание: @assylias удалось сделать это с помощью лямбды, используя AtomicInteger
. вероятно, у него должен быть принятый ответ.
Я не уверен, что вы можете сделать это с лямбдой (потому что это stateful), но с простым 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);
с генератором вам нужно отслеживать ваш текущий индекс. Одним из способов было бы:
IntStream natural = IntStream.generate(new AtomicInteger()::getAndIncrement);
примечание: Я использую AtomicInteger как изменяемое целое число, а не для его потоковой безопасности: если вы распараллелите поток, порядок будет не таким, как ожидалось.
построен в IntStream
:
IntStream.range(0, Integer.MAX_VALUE)
Это возвращает все значения до (но не включая) Integer.MAX_VALUE
.