携手创作,共同成长!这是我参与「掘金日新计划 · 8 月更文挑战」的第23天,点击查看活动详情
今天继续熟悉一下 Lambda 表达式,昨天只是简单做了一个引入,确实认识到了 Lambda 表达式的简洁。今天继续深入......
Lambda 表达式语法
Lambda 表达式在 Java 语言中引入了一个 “->” 操作符,该操作符被称为 Lambda 表达式操作符或箭头操作符。操作符将 Lambda 分为了两个部分:
- 左侧:指定了 Lambda 表达式需要的所有参数;
- 右侧:指定了 Lambda 体,即 Lambda 表达式要执行的功能。
形似:
//例1
(someParams) -> someFunctions
//例2
(someParams) -> {someFunctions;}
Lambda 表达式重要特性
- 可选类型声明:不需要声明参数类型,编译器可以统一识别参数值;
- 可选的参数圆括号:一个参数无需定义圆括号,但无参或有多个参数时需要定义圆括号;
//无参,无返回值,Lambda 表达式只需要一条语句
public void example01() {
Runnable runnable = () -> System.out.println("Runnable 运行!");
runnable.run();
}
结果:
Runnable 运行!
//一个参数,无返回值,Lambda 表达式写法
public void example02() {
Consumer<String> consumer = (x) -> System.out.println(x);
consumer.accept("Hello Consumer!");
}
结果:
Hello Consumer!
//只有一个参数时,参数的小括号可以省略
//上面的写法可以简化为以下
public void example03() {
Consumer<String> consumer = x -> System.out.println(x);
consumer.accept("Hello Consumer!");
}
结果:
Hello Consumer!
//两个参数,Lambda 体中有多条语句
public void example04() {
Comparator<Integer> com = (x,y) -> {
System.out.println("函数接口");
return Integer.compare(x,y);
};
System.out.println(com.compare(2,4));
}
结果:
函数接口
-1
- 可选的大括号:如果主体只包含一个语句,就不需要使用大括号;
//两个以上参数,有返回值,Lambda 体只有一个语句;return 和大括号都不用写
public void example05() {
Comparater<Integer> com = (x,y) -> Integer.compare(x,y);
System.out.println(com.compare(4,2));
}
结果:
1
- 可选的返回关键字:如果主体只有一个表达式返回值,编译器会自动返回,大括号需要指明表达式返回了一个数值。
//Lambda 表达式的参数列表的数据类型可以不写(JVM 能通过上下文推断出数据类型,即“类型推理”)
public void example06() {
Comparator<Integer> com = (Integer x, Integer y) -> Integer.compare(x,y);
System.out.println(com.compare(5,3));
}
结果:
1
类型推理:在执行 Java 编译程序时,JVM 根据程序的上下文推断出了参数的类型,Lambda 表达式依赖于上下文环境。
顺口溜:左右遇一括号省,左侧推断类型省,能省则省。
主要学习了一下 Lambda 表达式的语法,也就是在写代码时 Lambda 表达式该怎么用。Lambda 表达式主要就是使代码更简洁,所以书写的时候也是能省则省,所以有很多便捷语法,需要了解。但还是那句话,写得越少,就越难看懂......
希望本文能够帮到你,有错误,望指正!
我向你敬礼啊,Salute!