Используя Java Streams, вы можете использовать только это (при условии, что ваш массив имеет 2 измерения):
int[][] array = {{1, 2, 3}, {4, 5}, {6, 7, 8}, {9, 10}};
int sum = Arrays.stream(array)
.flatMapToInt(Arrays::stream)
.sum();
Если ваш массив имеет 3 измерения, вы можете расширить его до следующего:
int[][][] array = {{{1, 2, 3}, {4, 5}, {6, 7, 8}}, {{9}, {10}}};
int sum = Arrays.stream(array)
.flatMap(Arrays::stream)
.flatMapToInt(Arrays::stream)
.sum();
Для обработки массивов с неизвестной глубиной вы можете использовать этот метод для их выравнивания:
private static Stream<Object> flatMapDynamicArray(Object[] array) {
return Arrays.stream(array)
.flatMap(o -> o.getClass().isArray() ?
flatMapDynamicArray((Object[]) o) :
Stream.of(o));
}
Вы также можете использовать o instanceof Object[]
вместо o.getClass().isArray()
, но для моих тестов второй показал лучшую производительность.
Используйте этот метод следующим образом:
Integer[][][] array = {{{1, 2, 3}, {4, 5}, {6, 7, 8}}, {{9}, {10}}};
int sum = flatMapDynamicArray(array)
.mapToInt(i -> (int) i)
.sum();
Результатом во всех случаях будет 55
для массива, которым вы поделились.