Resumen de aprendizaje de Java: 24

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));	//传递可变参数
    }
}

49 artículos originales publicados · Me gusta25 · Visitas1524

Supongo que te gusta

Origin blog.csdn.net/weixin_45784666/article/details/104911275
Recomendado
Clasificación