Предположим, нам нужна функция, которая будет принимать число в качестве параметра и возвращать сумму этих двух чисел. В kotlin мы кодируем как ниже

fun add(number1: Int, number2: Int) = number1 + number2

Приведенный выше код работает нормально. Но проблема в том, что если мы хотим реализовать в нашем коде другие математические термины, такие как вычитание, умножение и деление, мы должны написать отдельный метод для отдельного математического расчета. Нравится

fun subtract(number1: Int, number2: Int) = number1 - number2
fun division(number1: Int, number2: Int) = number1 / number2
fun multiplication(number1: Int, number2: Int) = number1 * number2

И мы вызываем эти функции в классе Main, как показано ниже.

println(add(12, 2))             // 14
println(subtract(12, 2))        // 10
println(multiplication(12, 2))  // 24
println(division(12, 2))        // 12

Но мы можем написать один метод для вычисления всех типов математических задач с помощью Lambda. Функция будет такой

fun calculate(num1: Int, num2: Int, lambda: (Int, Int)->Int): Int {
    return lambda(num1, num2)
}

И мы вызываем функцию в классе Main, как показано ниже.

println(calculate(12, 12) {num1, num2 ->
    num1 + num2
})

Этот код рассчитает сумму двух чисел. Если мы используем другой оператор вместо (+), функция будет считать по знаку.

Полный исходный код здесь