Как я могу получить поток из трехмерного массива в Java 8? - PullRequest
0 голосов
/ 10 июня 2018

Как я знаю, чтобы получить Stream из 2-мерного массива, но я хочу знать, как я могу получить Stream из-под 3-мерного массива?

 int[][][] data = {
                    {
                        {1, 2, 3},
                        {4, 5, 6},
                        {7, 8, 9}
                    },
                    {
                        {1, 2, 3},
                        {4, 5, 6},
                        {7, 8, 9}
                    }
                  };

Ответы [ 2 ]

0 голосов
/ 10 июня 2018

Если вы можете сделать это с двумерным массивом, то сделать это для N размерного массива не так уж сложно.

Решение может быть сделано следующим образом:

IntStream result = Arrays.stream(data)
                         .flatMap(Arrays::stream)
                         .flatMapToInt(Arrays::stream);

Чтобы лучше понять, что происходит выше, вы можете разделить вызовы метода следующим образом:

// 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);
0 голосов
/ 10 июня 2018

Вам просто нужно позвонить flatMap в другой раз, чтобы изменить поток с int[][] на поток int[].

IntStream stream = Arrays.stream(data)
                         .flatMap(twoDArray -> Arrays.stream(twoDArray))
                         .flatMapToInt(oneDArray -> Arrays.stream(oneDArray));
...