Expresión lambda
La expresión Lambda se refiere a una forma de definición simplificada aplicada en el contexto de una interfaz de método abstracto único (SAM), que se puede utilizar para resolver el complejo problema de la definición de clase interna anónima.
Sintaxis de la expresión lambda:
(参数)->方法体
Cuerpo del método equivalente a la subclase que anula el método abstracto
Ejemplo: comenzar con las expresiones Lambda
package Project.Study.Lambda_test;
interface IMessage{
public void print();
}
public class Test1 {
public static void main(String [] args){
//此处为Lambda表达式,没有任何输入参数,只是进行输出操作
fun(()->System.out.println("Hello World"));
}
public static void fun(IMessage msg){
msg.print();
}
}
//结果:
//Hello World
Ejemplo: uso de clases internas anónimas para las operaciones anteriores
package Project.Study.Lambda_test;
interface IMessage{
public void print();
}
public class Test1 {
public static void main(String [] args){
fun(new IMessage() { //等价于Lambda表达式定义
@Override
public void print() {
System.out.println("Hello World");
}
});
}
public static void fun(IMessage msg){
msg.print();
}
}
//结果:
//Hello World
Para distinguir la interfaz utilizada por la expresión Lambda, puede usar la anotación "@FunctionalInterface" en la interfaz para declarar que se trata de una interfaz funcional. Solo se permite definir un método abstracto.
Ejemplo: interfaz funcional
@FunctionalInterface
interface IMessage{
public void print();
}
Ejemplo: definir un método con parámetros y valores de retorno
package Project.Study.Lambda_test;
interface IMessage{
public int add(int x,int y);
}
public class Test1 {
public static void main(String [] args){
fun((s1,s2)->{
return s1-s2;
});
}
public static void fun(IMessage msg){
System.out.println(msg.add(10,20));
}
}
//结果:
//-10
Ejemplo: pasar parámetros variables
package Project.Study.Lambda_test;
@FunctionalInterface
interface IMessage2{
public int add(int...args);
static int sum(int...args){ //此方法可以由接口名称直接调用
int sum=0;
for(int temp:args){
sum+=temp;
}
return sum;
}
}
public class Test2 {
public static void main(String [] args){
//在Lambda表达式中则直接调用接口里定义的静态方法
fun2((int...param)->IMessage2.sum(param));
}
public static void fun2(IMessage2 msg){
System.out.println(msg.add(10,20,30)); //传递可变参数
}
}