Пожалуйста, помогите понять ход выполнения
class Main {

    interface Operation {  //Создал интерфейс
        double method1(double x, double y);//Метод у которого два параметра
    }

    static class OperationProvider { // Статический класс
        static double staticSum(double x, double y) { // Статический метод с двумя параметрами, который возвращает сумму
            return x + y;
        }

        double instanceMinus(double x, double y) { // метод который возвращает разницу
            return x - y;
        }
    }

    static double[] massOperation(double[] a, double[] b, Operation operation) { // стат. метод, с тремя параметрами
        double[] result = new double[a.length];// задаю размер массива равный длине а
        for (int n = 0; n < a.length; n++ ) { // цикл, который выполняется пока n<a.lenght
            result[n] = operation.method1(a[n], b[n]);    // тут не могу сформулировать что происходит ? передаются эти параметры в method1
        }
        return result;
    }

    public static void main (String[] args) {
        double[] a = {1.0, 2.2, 3.1};
        double[] b = {3.2, 4.1, 9.3};
        final OperationProvider myOperationProvider = new OperationProvider();

        massOperation(a, b, (x, y) -> OperationProvider.staticSum(x, y));
        massOperation(a, b, (x, y) -> myOperationProvider.instanceMinus(x, y));
    }
}