i++
имеет значение i
перед тем, как увеличивается. Вам необходимо использовать префиксный оператор.
IntStream.iterate(0, i -> ++i).limit(5).forEach(val -> ints.add(val));
На самом деле, не делай этого. Нет причин мутировать i
, его просто выбрасывают. Используйте бесплатную версию побочного эффекта. В конце концов, в этом вся суть функционального программирования: избегать побочных эффектов.
IntStream.iterate(0, i -> i + 1).limit(5).forEach(val -> ints.add(val));
Для конкретного случая потока последовательных целых чисел вы можете заменить iterate
и limit
на range
:
IntStream.range(0, 5).forEach(val -> ints.add(val));
И, наконец, также было бы лучше собрать поток в список, а не добавлять значения с помощью forEach
. Он прямо выражает намерение создать список, что опять-таки позволяет избежать побочных эффектов.
List<Integer> ints = IntStream.range(0, 5).boxed().collect(Collectors.toList());