Lambda表达式
- λ是希腊字母表中排序第十一位的字母,英文名为Lambda。
- 其实质是函数式编程
- 使用 Lambda 表达式可以使代码变的更加简洁紧凑。
- 避免匿名内部类定义过多
- 去掉无意义的代码,留下核心的思维
语法
(params)->expression[表达式]
(params)->statement[语句]
(params)->{statements}
函数式接口(Functional Interface)
定义
- 任何接口,若只包含唯一抽象方法,那么它就是函数式接口,对于函数式接口,可以使用Lambda表达式来创建对象。
特征
- 可选类型声明:不需要声明参数类型,编译器可以统一识别参数值。
- 可选的参数圆括号:一个参数无需定义圆括号,但多个参数需要定义圆括号。
- 可选的大括号:如果主体包含了一个语句,就不需要使用大括号。
- 可选的返回关键字:如果主体只有一个表达式返回值则编译器会自动返回值,大括号需要指定表达式返回了一个数值。
代码实现测试
interface FunInterface{
void did(int a,double b);
}
public class Lambda {
//静态内部类
static class Lambda2 implements FunInterface{
@Override
public void did(int a,double b) {
System.out.println("静态内部类实现接口方法");
}
}
public static void main(String[] args) {
//局部内部类
class Lambda3 implements FunInterface{
@Override
public void did(int a,double b) {
System.out.println("局部内部类实现接口方法");
}
}
FunInterface l1=new Lambda1();
FunInterface l2=new Lambda2();
FunInterface l3=new Lambda3();
//匿名内部类
FunInterface l4=new FunInterface() {
@Override
public void did(int a,double b) {
System.out.println("匿名内部类实现接口方法");
}
};
//Lambda表达式
FunInterface l5=(int a,double b)->{
System.out.println("Lambda表达式1");
};
//省略参数类型
FunInterface l6=(a,b)->{
System.out.println("Lambda表达式2");
};
//若方法中只有一条语句,可省略中括号
FunInterface l7=(a,b)-> System.out.println("Lambda表达式2");
//输出查看
l1.did(1,3.5);
l2.did(1,3.5);
l3.did(1,3.5);
l4.did(1,3.5);
l5.did(1,3.5);
l6.did(1,3.5);
l7.did(1,3.5);
}
}
//实现类
class Lambda1 implements FunInterface{
@Override
public void did(int a,double b) {
System.out.println("类实现接口方法");
}
}
输出结果
类实现接口方法
静态内部类实现接口方法
局部内部类实现接口方法
匿名内部类实现接口方法
Lambda表达式1
Lambda表达式2
Lambda表达式2