如何使用Java 8流生成2D int数组?

Say*_*Pal 3 java java-8 java-stream

我正在尝试int[][]使用Java 8流生成.

这是我到目前为止所做的:

objects.parallelStream()
            .map(o -> o.getPropertyOnes()
                    .parallelStream()
                    .map(t-> t.getIndex())  //<-- getIndex() returns int
                    .mapToInt(i -> i)
                    .toArray())            //<-- here I have a Stream<int[]>
            .toArray();                   //lost here
Run Code Online (Sandbox Code Playgroud)

在外面的结尾.map()我有一个Stream<int[]>,但不知道如何将其转换为int[][].请建议.

Flo*_*own 6

首先你可以简化map().mapToInt()to mapToInt(t-> t.getIndex())(也许你应该使用方法参考<type>::getIndex).

正如你所说,你已经Stream<int[]>map舞台后.那么你只需要提供一个数组生成器函数,如:

int[][] array = Stream.of(1, 2, 3, 4)
                      .map(i -> IntStream.range(0, i).toArray())
                      .toArray(int[][]::new);
Run Code Online (Sandbox Code Playgroud)

输出:

[[0], [0, 1], [0, 1, 2], [0, 1, 2, 3]]
Run Code Online (Sandbox Code Playgroud)

  • @SayanPal你有一个`Stream <Integer>`这不能存储在`int []`中.`stream :: mapToInt`返回一个`IntStream`,它提供一个`toArray`方法,它返回一个`int []`.这正是您所需要的. (3认同)