Lambda 简介
Lambda表达式,也可以成为闭包。
Lambda允许把函数作为一个方法的参数(函数作为参数传递进方法中)。
Lambda对接口的要求
不是所有的接口都可以使用Lambda表达式来实现。
接口中只能有一个必须被实现的方法(抽象方法)。
注解 @FunctionalInterface
用于约束接口内抽象方法的个数,要求接口中的抽象方法只有一个。这个注解一般会和lambda表达式一起使用。
加上这个注解后,如果接口内有两个抽象方法则会报错。
Lambda基础语法
语法形式为 () -> {}, **()用来描述参数列表,{}**用来描述方法体,->为lambda运算符。
下面介绍几个具体的例子。
case 1: 无参数无返回值
- 首先定义一个接口,其中包含一个无参无返回值方法method。
@FunctionalInterface
public interface NoReturnNoParam {
void method(); //定义抽象方法method
}
- 然后在主函数中用匿名内部类的方式实现。
public class Main {
public static void main(String[] args) {
//匿名内部类
NoReturnNoParam noReturnNoParam = new NoReturnNoParam() {
//重写接口中的抽象方法method
@Override
public void method() {
System.out.println("无参数无返回值方法");
}
};
//调用被重写的方法
noReturnNoParam.method();
}
}
- 用lambda表达式简化上面的例子。
public class Main {
public static void main(String[] args) {
//用lambda表达式重写该方法
NoReturnNoParam noReturnNoParam =() ->{
System.out.println("无参数无返回值方法");
};
//调用被重写的方法
noReturnNoParam.method();
}
}
case 2: 1个参数无返回值
同理我们可以依照上面的方式定义一个有参无返回值接口。
- 定义接口
@FunctionalInterface
public interface NorReturnOneParam {
void method(int a); //有1个 int型参数的抽象方法
}
- 用lambda表达式实现
public class Main {
public static void main(String[] args) {
//参数定义在()内
NorReturnOneParam norReturnOneParam = (int a) -> {
System.out.println("传入的参数等于:"+a);
};
//调用被重写的方法
norReturnOneParam.method(5);
}
}
case 3: 1个参数有返回值
- 定义一个有String类型返回值,int类型参数的接口。
@FunctionalInterface
public interface oneParam {
String method(int a);
}
- 用lambda表达式调用该方法
public class Main {
public static void main(String[] args) {
oneParam oneParam = (int a)-> {
return "传入的参数等于:"+a;
};
//打印返回的String类型
System.out.println(oneParam.method(6));
}
}
Lambda表达式再简化
- 简化参数类型,但必须所有参数都不写
//简化前, a前有int类型修饰
NorReturnOneParam norReturnOneParam = (int a) -> {
System.out.println("传入的参数等于:"+a);
};
//简化后
NorReturnOneParam norReturnOneParam = (a) -> {
System.out.println("传入的参数等于:"+a);
};
- 简化参数小括号
NorReturnOneParam norReturnOneParam = a -> {
System.out.println("传入的参数等于:"+a);
};
- 简化参数大括号如果方法只有一条语句
NorReturnOneParam norReturnOneParam = a ->
System.out.println("传入的参数等于:"+a);
- 简化return
//简化前
oneParam oneParam = (int a)-> {
return "传入的参数等于:"+a;
};
//简化后
oneParam oneParam = a-> "传入的参数等于:"+a;