目录
1.1 概述
Lambda 表达式(lambda expression)是一个匿名函数。主要用来优化匿名内部类的结构。我们先看下传统的匿名内部类的使用方式。
new Thread(new Runnable() {
@Override
public void run() {
System.out.println("有一个线程即将执行。");
}
}).start();
这是一个开启线程的案例,在这个案例中,这个Runnable
的匿名实现类中,我们关注的其实只有里面的实现逻辑System.out.println("有一个线程即将执行。")
,但整体代码显得非常繁琐跟冗余。JDK8提供了Lambda表达式来简化匿名内部类的写法,语法更加简洁,如下
new Thread(()->System.out.println("有一个线程即将执行。")).start();
1.2 标准格式
Lambda表达式的语法为:
([参数列表]) ->{
代码体;
}
无参的代码演示:
public class Demo02Lambda {
public static void main(String[] args) {
Drinkable drinkable = ()->{
System.out.println("喝水...");
};
drinkable.drink();
}
}
interface Drinkable{
void drink();
}
有参的代码演示:
public class Demo03Lambda {
public static void main(String[] args) {
Eatable eatable = (food)->{
System.out.println("大口的吃"+food);
return "吃饱了";
};
String result = eatable.eat("牛肉");
System.out.println(result);
}
}
interface Eatable{
String eat(String food);
}
1.3 省略模式
在lambda标准格式的基础上,可以使用省略写法的规则:
-
参数类型可以省略
-
如果参数有且仅有一个,则小括号可以省略
-
如果方法体中有且仅有一句代码,可以同时省略大括号、return关键字以及分号。
如常规表达式为:
(i)->{
return i+i;
}
省略模式后为:
i->i+i
1.4 使用限制
lambda表达式使用有几个条件需要特别注意:
- lambda表达式是针对接口才能使用
- 接口中必须有且仅有一个抽象方法,能被
@FunctionalInterface
注解修饰的方法
1.5 Lmabda表达式的语法总结: () -> ();
前置 | 语法 |
---|---|
无参数无返回值 | () -> System.out.println(“Hello WOrld”) |
有一个参数无返回值 | (x) -> System.out.println(x) |
有且只有一个参数无返回值 | x -> System.out.println(x) |
有多个参数,有返回值,有多条lambda体语句 | (x,y) -> {System.out.println(“xxx”);return xxxx;}; |
有多个参数,有返回值,只有一条lambda体语句 | (x,y) -> xxxx |