目录
Lambda 表达式,也可称为闭包,它是推动 Java 8 发布的最重要新特性。可以取代大部分的匿名内部类。作为一种进奏的代码风格,可以写出更简洁灵活的代码。
个人的理解,Lambda表达式是对应接口的一种匿名实现。
语法形式
语法形式为 () -> {}
Lambda操作符为“->”,该操作符被称为Lambda操作符或箭头操作符。它将Lambda分为两部分:
左侧():表达式所需参数
右侧{}:需要执行功能的代码块
特性
- 可选类型声明:不需要声明参数类型,编译器可以统一识别参数值。
- 可选的参数圆括号:一个参数无需定义圆括号,但多个参数要定义圆括号。
- 可选的大括号:如果主题包含了一个语句,就不需要使用大括号。
- 可选的返回关键字:如果主体只有一个表达式返回值则编译器会自动返回值,大括号需要指明表达式返回一个数值。
示例
为了更为直观,先定义几个接口
1.没有传参
public interface LambdaInterface1 {
public void test();
}
对应lambda表达式为:
LambdaInterface1 lambdaInterface1 = () -> {
System.out.println("no params: ");
};
2.一个传参
public interface LambdaInterface2 {
public void test(int x);
}
对应lambda表达式:
LambdaInterface2 lambdaInterface2 = (a) -> {
System.out.println("one params: "+a);
};
也可以省略括号,如:
LambdaInterface2 lambdaInterface2NoBrace = a -> {
System.out.println("one params NoBrace: "+a);
};
3.两个传参(多个传参同理)
public interface LambdaInterface3 {
public void test(int x,int y);
}
对应lambda表达式:
LambdaInterface3 lambdaInterface3 = (a,b) -> {
System.out.println("two params; "+(a + b));
};
4.指定返回类型
public interface LambdaInterface4 {
public int test(int x, int y);
}
对应lambda表达式:
LambdaInterface4 lambdaInterface4 = (a,b) -> {
System.out.println("specify the type; "+(a + b));
return a+b;
};
5.一条语句,可以省略return和大括号
如果只有一条语句的时候,return和大括号都可以省略,如:
LambdaInterface4 lambdaInterface4NoBrace = (a,b) ->a + b;
6.数据类型可以省略,编译器可以推断出类型
以上实例,都没有指定类型。但是编译器可以根据传入参数,自动推断出类型是int型。如:
1.LambdaInterface3 lambdaInterface3 = (a,b) -> {
System.out.println("two params; "+(a + b));
};
2.LambdaInterface4 lambdaInterface4NoBrace = (a,b) ->a + b;
完整实例
如下:
public class LambdaTester {
public static void main(String[] args){
lambdaInterface1.test();
lambdaInterface2.test(2);
lambdaInterface3.test(3,5);
lambdaInterface4.test(4,6);
lambdaInterface2NoBrace.test(4);
}
static LambdaInterface1 lambdaInterface1 = () -> {
System.out.println("no params: ");
};
static LambdaInterface2 lambdaInterface2 = (a) -> {
System.out.println("one params: "+a);
};
static LambdaInterface2 lambdaInterface2NoBrace = a -> {
System.out.println("one params NoBrace: "+a);
};
static LambdaInterface3 lambdaInterface3 = (a,b) -> {
System.out.println("two params; "+(a + b));
};
static LambdaInterface4 lambdaInterface4 = (a,b) -> {
System.out.println("specify the type; "+(a + b));
return a+b;
};
static LambdaInterface4 lambdaInterface4NoBrace = (a,b) ->a + b;
}
运行结果:
no params:
one params: 2
two params; 8
specify the type; 10
one params NoBrace: 4
参考文档
https://www.cnblogs.com/drl-blogs/p/10803013.html
https://www.runoob.com/java/java8-lambda-expressions.html
https://www.cnblogs.com/haixiang/p/11029639.html