Как создать int [] или Collection <Integer> со значением 0,1,2,..., N в одной строке на Java с использованием выражения лямбда?

Я хотел бы сделать что-то вроде:

int[] seq = new int[N];
for (int i = 0 ; i<N ;i++){
    seq[i]=i;
}

в одной строке, и мне интересно, возможно ли это с помощью выражения лямбда.

Если он работает с ArrayList<Integer>, это нормально для меня.

Ответ 1

Используйте IntStream.range():

int[] seq = IntStream.range(0,N).toArray();

или IntStream.rangeClosed(), если вы хотите включить N:

int[] seq = IntStream.rangeClosed(0,N).toArray();

Ответ 2

В Java 9, используя более гибкий метод IntStream.iterate:

int[] seq = IntStream.iterate(0, x -> x < n, x -> x + 1).toArray();

Описание метода:

IntStream.iterate​(int seed, IntPredicate hasNext, IntUnaryOperator next):

  • seed - начальный элемент;
  • hasNext - предикат для применения к элементам, чтобы определить, когда поток должен завершиться;
  • next - функция, применяемая к предыдущему элементу для создания нового элемента.

Ответ 3

A BitSet тоже. Хотя тогда без лямбда.

BitSet bset = new BitSet(N); // Initial capacity for N bits.
bset.set(0, N); // Set a range to true for 0 upto N-1.