Как я знаю, чтобы получить Stream из 2-мерного массива, но я хочу знать, как я могу получить Stream из-под 3-мерного массива?
int[][][] data = { { {1, 2, 3}, {4, 5, 6}, {7, 8, 9} }, { {1, 2, 3}, {4, 5, 6}, {7, 8, 9} } };
Если вы можете сделать это с двумерным массивом, то сделать это для N размерного массива не так уж сложно.
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);
Вам просто нужно позвонить flatMap в другой раз, чтобы изменить поток с int[][] на поток int[].
flatMap
int[][]
int[]
IntStream stream = Arrays.stream(data) .flatMap(twoDArray -> Arrays.stream(twoDArray)) .flatMapToInt(oneDArray -> Arrays.stream(oneDArray));