Суммирование элементов в строке двухмерного массива byte[][]

Задание: написать метод sumRow, который принимает два параметра: двухмерный массив int[][] и int. Метод дожен возвращать сумму всех элементов в строке массива, заданной во втором параметре, и должен возвращать 0, если номер строки некорректен.

Написал код с использованием Stream.

Вопрос: как реализовать всё то же самое для двухмерного массива байт byte[][]? На сколько я знаю, Stream не работает с byte.

public static void main(String[] args) {
    int[][] table = new int[4][5];

    // заполняем массив
    table = Arrays.stream(table)
            .map(row -> Arrays.stream(row)
                    .map(cell -> (int) (1 + Math.random() * 9))
                    .toArray())
            .toArray(int[][]::new);

    // тест
    sumRowTest(table);
}
public static int sumRow(int[][] table, int row) {
    if (row < 0 || row > table.length - 1) return 0;
    return Arrays.stream(table[row]).sum();
}
public static void sumRowTest(int[][] table) {
    Arrays.stream(table).map(Arrays::toString).forEach(System.out::println);
    // [2, 1, 9, 5, 8]
    // [5, 6, 7, 7, 3]
    // [2, 2, 7, 1, 9]
    // [4, 8, 5, 3, 3]

    IntStream.rangeClosed(0, table.length)
            .mapToObj(i -> "sumRow:" + i + "=" + sumRow(table, i))
            .forEach(System.out::println);
    // sumRow:0=25
    // sumRow:1=28
    // sumRow:2=21
    // sumRow:3=23
    // sumRow:4=0
}

Ответы (1 шт):

Автор решения: BccHnw

Если стоит задача использовать Stream на byte[] (т.е. на строке двумерного массива) с вызовом sum(), то можно использовать Stream на индексе:

public class Main {
    public static void main(String[] args) {
        byte[] arr = { 127, 127, 0, -1 };
        int sum = IntStream.range(0, arr.length).map(i -> arr[i]).sum();
        System.out.println(sum);
    }
}

Но особенность в том, что суммирование идёт на int, т.е. переполнение иначе работает, чем сумма строго на byte. Этот пример выдаёт 253, тогда как сумма строго на byte будет -3. Но, понятно, от int результата можно перейти к byte при помощи кастинга: System.out.println((byte)sum);

→ Ссылка