Multiplicação de matrizes usando arraylist

Galera, estou fazendo um programa em que ele multiplicará uma matriz utilizando o cluster. Assim eu envio do servidor para cada cliente uma classe(FilhaDaJamaline) que vai conter a linha(Um arrayList) e as colunas(outro ArrayList) necessárias para realizar a multiplicação. Só que estou em dúvida como fazer uma multiplicação de “matrizes” utilizando dois arrayLists.

Eu estou conseguindo fazer com uma matriz de ordem 2x2 mas com ordens maiores que essa, não consigo.

public class ServerListener implements Runnable {

    private Socket SocketDoCliente;
    ObjectInputStream obj;
    ArrayList<Double> matrizResultado;

    public ServerListener(Socket SocketDoCliente) throws IOException {
        this.SocketDoCliente = SocketDoCliente;
        obj = new ObjectInputStream(SocketDoCliente.getInputStream());
        matrizResultado = new ArrayList<>();
    }

    @Override
    public void run() {
        FilhaDaJamaline filha;
        int contador=0;
        double somatorio = 0;
        try {
            while ((filha = (FilhaDaJamaline) obj.readObject()) != null) {
               for (int i = 0; i < filha.getListaLinhas().size(); i++) {
                    System.out.println("Valores passados: " + filha.getListaLinhas().get(i));
                }
                for (int i = 0; i < filha.getListaLinhas().size(); i++) {
                    somatorio += filha.getListaLinhas().get(i) * filha.getMatrizColuna().get(i * 2);
                }
                System.out.println("Somatório: " + somatorio);
                matrizResultado.add(somatorio);
                somatorio = 0;
                for (int i = 0; i < filha.getListaLinhas().size(); i++) {
                    somatorio += filha.getListaLinhas().get(i) * filha.getMatrizColuna().get(i + contador);
                    contador++;
                }
                System.out.println("Somatório: " + somatorio);
                matrizResultado.add(somatorio);