如何在Java 8中从三维数组中获取Stream?

hit*_*ept 3 arrays java-8 java-stream

据我所知从二维数组中获取Stream但我想知道如何从3维数组中获取Stream?

 int[][][] data = {
                    {
                        {1, 2, 3},
                        {4, 5, 6},
                        {7, 8, 9}
                    },
                    {
                        {1, 2, 3},
                        {4, 5, 6},
                        {7, 8, 9}
                    }
                  };
Run Code Online (Sandbox Code Playgroud)

Yas*_*jaj 5

您只需要flatMap再次调用将流从 更改int[][]为流int[]

IntStream stream = Arrays.stream(data)
                         .flatMap(twoDArray -> Arrays.stream(twoDArray))
                         .flatMapToInt(oneDArray -> Arrays.stream(oneDArray));
Run Code Online (Sandbox Code Playgroud)


Ous*_* D. 5

如果你能用二维数组做到这一点,那么为N维度数组做这件事并不困难.

解决方案可以如下完成:

IntStream result = Arrays.stream(data)
                         .flatMap(Arrays::stream)
                         .flatMapToInt(Arrays::stream);
Run Code Online (Sandbox Code Playgroud)

为了更好地帮助理解上面发生的事情,您可以按如下方式拆分方法调用:

// the call to Arrays.stream yields a Stream<int[][]>
Stream<int[][]> result1 = Arrays.stream(data); 

// the call to flatMap yields a Stream<int[]>
Stream<int[]> result2 = result1.flatMap(Arrays::stream);

  // the call to flatMapToInt yields a IntStream
IntStream intStream = result2.flatMapToInt(Arrays::stream);
Run Code Online (Sandbox Code Playgroud)