Как уже указывалось, лямбда-выражения были введены в Java 8.
Если вы работаете с python, C # или C ++, см. отличный пример Адриана Д. Финлая, который лично мне показался намного более понятным, чем официальная документация .
Вот быстрый взгляд на пример Адриана, созданный с использованием блокнота jupyter с ядром python и ядром Java IJava .
Python:
# lambda functions
add = lambda x, y : x + y
multiply = lambda x, y : x * y
# normal function. In python, this is also an object.
def add_and_print_inputs(x, y):
print("add_and_print inputs : {} {}".format(x,y))
return x + y
print(add(3,5), multiply(3,5), add_and_print_inputs(3,5))
Выход:
add_and_print inputs : 3 5
8 15 8
Лямбда-функции Java могут быть многострочными, тогда как в python они являются одним оператором. Однако здесь нет никаких преимуществ. В Python регулярные функции также являются объектами. Они могут быть добавлены в качестве параметров для любой другой функции.
# function that takes a normal or lambda function (myfunc) as a parameter
def double_result(x,y,myfunc):
return myfunc(x,y) * 2
double_result(3,5,add_and_print_inputs)
Выход:
add_and_print inputs : 3 5
16
Java
// functional interface with one method
interface MathOp{
int binaryMathOp(int x, int y);
}
// lambda functions
MathOp add = (int x, int y) -> x + y;
MathOp multiply = (int x, int y) -> x * y;
// multiline lambda function
MathOp add_and_print_inputs = (int x, int y) -> {
System.out.println("inputs : " + x + " " + y);
return x + y;};// <- don't forget the semicolon
// usage
System.out.print("" +
add.binaryMathOp(3,5) + " " +
multiply.binaryMathOp(3,5) + " " +
add_and_print_inputs.binaryMathOp(3,5))
Выход:
inputs : 3 5
8 15 8
А при использовании в качестве параметра:
// function that takes a function as a parameter
int doubleResult(int x, int y, MathOp myfunc){
return myfunc.binaryMathOp(x,y) * 2;
}
doubleResult(3,5,add_and_print_inputs)
Выход:
inputs : 3 5
16