如何使用lambda表达式在Java中的一行中创建值为0,1,2,...,N的int []或Collection <integer>?

时间:2018-02-08 11:20:44

标签: java lambda

我想做这样的事情:

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

...在一行中,我想知道是否可以使用lambda表达式。

如果它与ArrayList<Integer>一起使用,那对我来说没问题。

3 个答案:

答案 0 :(得分:28)

使用IntStream.range()

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

IntStream.rangeClosed()如果您想加入N

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

答案 1 :(得分:13)

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 - 要应用于前一个元素以生成新元素的函数。

答案 2 :(得分:2)

BitSet也会这样做。虽然没有lambda。

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