Lambda表达式
- Lambda 允许把函数作为一个方法的参数(函数作为参数传递进方法中)。
- 使用 Lambda表达式可以使代码变的更加简洁紧凑。
Lambda重要特性
- 可选类型声明:不需要声明参数类型,编译器可以统一识别参数值。
- 可选的参数圆括号:一个参数无需定义圆括号,但多个参数需要定义圆括号。
- 可选的大括号:如果主体包含了一个语句,就不需要使用大括号。
- 可选的返回关键字:如果主体只有一个表达式返回值则编译器会自动返回值,大括号需要指定明表达式返回了一个数值。
- ==针对有且只有一个方法的接口,多个方法的接口不能用lambda==
下面是几个场景的Demo
需要被生成匿名内部类的父接口
//接口1 LambdaService
public interface LambdaService {
public void say();
//public void join(String s);
}
//接口2 LambdaService1
public interface LambdaService1 {
public void join(String str);
}
//接口3 LambdaService3
public interface LambdaService3 {
public String sayNm(Integer i);
}
场景
- lambda遍历foreach集合
List list = Arrays.asList("111", "222", "333", "444");
list.forEach(n -> System.out.println(n));
- lambda创建匿名内部类,内含无参函数
LambdaService lambdaService = () -> System.out.println("this lambdaservice say");
lambdaService.say();
- lambda创建匿名内部类,有参
LambdaService1 lambdaService1 = (s) -> System.out.println(s);
lambdaService1.join("this lambdaservice1 join");
- lambda创建匿名内部类,返回值,一行代码返回
LambdaService3 lambdaService3 = (s) -> "返回值为:" + s;
System.out.println(lambdaService3.sayNm(8));
- lambda创建匿名内部类,返回值,多行代码返回{return}
LambdaService3 lambdaService3 = (s) -> {
String str = "返回值为:" + s;
return str;
};
System.out.println(lambdaService3.sayNm(188));