Lambda表达式
概述:
Lambda表达式是java对数学函数表达式的一种体现形式,本质是一个值,在java中主要是体现在对特殊的匿名内部类对象的一种表示,代表匿名内部类的对象。
也可以理解为Lambda表达式是匿名内部类格式的一种简化,但是本质不一样。
前提:
1、有且只有一个抽象方法的接口
2、必须要有上下文推断
格式:
标准格式:【三个一:一个小括号 一个箭头 一个花括号】
( 参数列表 ) -> { 执行代码段 }
格式解释:
(参数列表):是匿名内部类中重写的抽象方法的方法参数列表【就是接口抽象方法的参数列表】
->:原封不动 他是lambda表达式的标志
{执行代码段}:是匿名内部类中重写的抽象方法的方法体【lambda表达式对接口抽象方法的重写】
好处:
Lambda表达式代表的匿名内部类的对象,在编译的时候不需要编译生成对应的类的字节码文件,而匿名内部类在编译的时候需要编译生成对应的字节码文件,所以Lambda表达式提升了代码的运行效率,格式变的简单使用方便
代码示例:
接口:
public interface InterfaceA {
void show();
}
测试类:
public class LambdaDemo {
public static void main(String[] args) {
//想要使用接口中的方法
//直接使用
new InterfaceA() {
@Override
public void show() {
System.out.println("我是匿名内部类中的show方法");
}
}.show();
//创建lambda表达式
//必须要有上下文推断
InterfaceA interfaceA = ()->{System.out.println("我是lambda表达式中的方法");};
interfaceA.show();
}
}
Lambda表达式的省略原则
概述:
在符合一定条件下Lambda表达式的格式可以进行简化的
具体原则:
1、小括号参数的参数类型可以直接省略
2、小括号的参数有且只有一个的时候,小括号可以省略
3、花括号中有且只有一个执行语句的时候,可以同时省略花括号 分号 和 return关键字
【要省略三者同时省略,否则一个都不要省略】
4、小括号和花括号的省略原则互不干扰,各省略各的
代码示例
public class TestInterface {
public static void main(String[] args) {
//1、小括号的参数类型可以直接省略
// InterfaceB interfaceB = (String s)->{System.out.println("我的工作是" + s);};
InterfaceB interfaceB = (s)->{System.out.println("我的工作是" + s);};
interfaceB.work("开车");
//2、小括号的参数有且只有一个的时候,小括号可以省略
InterfaceB interfaceB2 = s->{System.out.println("我的工作是" + s);};
//3、花括号中有且只有一个执行语句的时候,可以同时省略花括号 分号 和 return关键字
// InterfaceC interfaceC = (a, b)->{return a + b ;};
InterfaceC interfaceC = (a, b)->a + b;
System.out.println(interfaceC.equals(10,20));
}
}