Подсчет чисел в массиве, функция

Помогите сделать подсчет чисел в методе. Что то не соображаю уже. Вообщем надо чтобы вывел сумму обоих матриц,в отдельном методе.Еще один вопрос,а как сделать чтобы матрица с наибольшей суммой выводился последним? Заранее спасибо. Java

import java.util.stream.IntStream;


public class Main {
    public static void main ( String[] args ) {
        int[][] a = new int[4][4];
        a = Matrix (a);

    }

    static int[][] Matrix ( int[][] a ) {
        for (int i = 0; i < a.length; i++) {
            System.out.println ();
            for (int j = 0; j < a.length; j++) {
                a[i][j] = (int) ( Math.random () * ( 100 ) );
                System.out.print (a[i][j] + " ");
            }

        }
        System.out.println ("");
        for (int k = 0; k < a.length; k++) {
            System.out.println ();
            for (int l = 0; l < a.length; l++) {
                a[k][l] = (int) ( Math.random () * ( 100 ) );
                System.out.print (a[k][l] + " ");
            }

        }
        **return a;
        int sum = 0;
        int sum = IntStream.of(a).sum();
        System.out.println("The sum is " + sum);
    }**
}

РЕДАКТИРОВАНО

import java.util.stream.IntStream;

public class Mainnn {

    public static void main(String[] args) {
        int[][] array1 = createArray (new int[4][4]);
        int[][] array2 = createArray (new int[4][4]);
        int[][] array3 = createArray (new int[4][4]);
        int arraySum1 = arraySum(array1);
        int arraySum2 = arraySum(array2);
        int arraySum3 = arraySum(array3);

        writeArray (array1);
        System.out.println("Сумма этого массива --> " + arraySum1);
        System.out.println("");
        writeArray (array2);
        System.out.println("Сумма этого массива --> " + arraySum2);
        System.out.println("");
        writeArray (array3);
        System.out.println("Сумма этого массива --> " + arraySum3);
        System.out.println("");
        System.out.println("............................................................");


        if (arraySum1>arraySum2 | arraySum1>arraySum3) {
            writeArray (array1);
            System.out.println(arraySum1);
            System.out.println("");
            System.out.println("Это наибольшая по числовому значению матрица, и она равна --> " + arraySum1);
        }
        else if(arraySum2>arraySum1 | arraySum2>arraySum3) {
            writeArray (array2);
            System.out.println (arraySum2);
            System.out.println("");
            System.out.println ("Это наибольшая по числовому значению матрица, и она равна --> " + arraySum2);
        }
        else if(arraySum3>arraySum1 | arraySum3>arraySum2) {
            writeArray (array3);
            System.out.println (arraySum3);
            System.out.println("");
            System.out.println ("Это наибольшая по числовому значению матрица, и она равна--> " + arraySum3);
        }
    }

    private static int[][] createArray ( int[][] array) {
        for (int i = 0; i < array.length; i++) {
            for (int j = 0; j < array.length; j++) {
                array[i][j] = (int) (Math.random() * (100));

            }
        }
        return array;
    }

    private static int[][] writeArray ( int[][] array) {
        for (int i = 0; i < array.length; i++) {
            for (int j = 0; j < array.length; j++) {
                System.out.print(array[i][j] + " ");
            }
            System.out.println();
        }
        return array;
    }

    private static int arraySum(int[][] array) {
        return IntStream.range(0, array.length)
                .map(i -> IntStream.range(0, array[i].length).map(n -> array[i][n]).sum())
                .sum();
    }

}

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

Автор решения: Дмитрий

Стрим не умеет работать с многомерным массивом, поэтому надо это реализовывать самостоятельно.

К примеру, можно так :

import java.util.Map;
import java.util.TreeMap;
import java.util.stream.IntStream;

public class Main {

    public static void main(String[] args) {

        generateArray(3).forEach((k, v) -> {
            printArray(v);
            System.out.println(k);
        });

    }

    private static Map<Integer, Integer[][]> generateArray(int numb) {
        final Map<Integer, Integer[][]> arrayMap = new TreeMap<>();
        for (int i = 0; i < numb; i++) {
            Integer[][] array = generateArray(new Integer[4][4]);
            Integer arraySum = arraySum(array);
            arrayMap.put(arraySum, array);
        }
        return arrayMap;
    }

    private static Integer[][] generateArray(Integer[][] array) {
        for (int i = 0; i < array.length; i++) {            
            for (int j = 0; j < array.length; j++) {
                array[i][j] = (int) (Math.random() * (100));                
            }
        }        
        return array;
    }

    private static Integer[][] printArray(Integer[][] array) {
        for (int i = 0; i < array.length; i++) {            
            for (int j = 0; j < array.length; j++) {
                System.out.print(array[i][j] + "; ");
            }
            System.out.println();
        }        
        return array;
    }

    private static Integer arraySum(Integer[][] array) {
        return IntStream.range(0, array.length)
                .map(i -> IntStream.range(0, array[i].length).map(n -> array[i][n]).sum())
                .sum();
    }

}
→ Ссылка