简介:
我们可以把Lambda表达式理解为一段可以传递的代码(将代码像数据一样进行传递)。Lambda允许把函数作为一个方法的参数,使用Lambda表达式可以写出更简洁、更灵活的代码,而其作为一种更紧凑的代码风格,使Java的语言表达能力得到了提升。
Lambda表达式语法
Lambda表达式在Java语言中引入了一个操作符“->”,该操作符被称为Lambda操作符或箭头操作符。它将Lambda分为两个部分:
-
左侧:指定了Lambda表达式需要的所有参数
-
右侧:制定了Lambda体,即Lambda表达式要执行的功能。
以下是lambda表达式的重要特征:
可选类型声明:不需要声明参数类型,编译器可以统一识别参数值。 可选的参数圆括号:一个参数无需定义圆括号,但无参数或多个参数需要定义圆括号。 可选的大括号:如果主体包含了一个语句,就不需要使用大括号。 可选的返回关键字:如果主体只有一个表达式返回值则编译器会自动返回值,大括号需要指定明表达式返回了一个数值。
Lambda表达式六种语法格式:(重要)
(1)语法格式一:无参,无返回值,Lambda体只需一条语句。如下:
public void test01(){
Runnable runnable=()-> System.out.println("我爱北京天安门");
runnable.run();//结果:我爱北京天安门
}
(2)语法格式二:Lambda需要一个参数,无返回值。如下:
public void test02(){
Consumer<String> consumer=new Consumer<>(){
public void accept(String x){
System.out.println(x);
}
};
consumer.accept("Hello Consumer");
==================================================================
Consumer<String> consumer=(String x)-> System.out.println(x);
consumer.accept("Hello Consumer");//结果:Hello Consumer
}
(3)语法格式三:Lambda表达式类型推断,参数类型可以省略:
public void test02(){
Consumer<String> consumer=(x)-> System.out.println(x);
consumer.accept("Hello Consumer");//结果:Hello Consumer
}
(4)语法格式四:Lambda只需要一个参数时,参数的小括号可以省略,如下:
public void test02(){
Consumer<String> consumer=x-> System.out.println(x);
consumer.accept("Hello Consumer");//结果:Hello Consumer
}
(5)语法格式五:Lambda需要两个及以上的参数,多条执行语句,并且可以有返回值:
Comparator<Integer> com=new Comparator<Integer>() {
@Override
public int compare(T o1, T o2) {
System.out.println(o1);
System.out.println(o2);
return o1.compareTo(o2);
}
};
===========================================================
Comparator<Integer> com=(T o1,T o2)->{
System.out.println(o1);
System.out.println(o2);
return o1.compareTo(o2);
};
(6)语法格式六:当Lambda体只有一条语句时候,return与大括号若有,都可省略。
Comparator<Integer> com=new Comparator<Integer>() {
@Override
public int compare(o1,o2) {
return o1.compareTo(o2);
}
};
===========================================================
Comparator<Integer> com=(o1,o2)->o1.compareTo(o2);
以上六种情况的总结:
左边:Lambda形参列表的参数类型左边可以省略,如果lambda形参列表只有一个参数,那么其括号也可以省略;
右边:lambda体应该由一对{}包裹,如果lambda体只有一条执行语句,可能是return,那么其=这个方法体的中括号也可以省略。
语法背诵口诀:左右遇一括号省,左侧推断类型省,能省则省。
上述内容学习自:
哔哩哔哩尚硅谷宋红康666节课:666.10-尚硅谷-高级-Lambda表达式使用举例_哔哩哔哩_bilibili
以及csdn大佬详解:(5条消息) Lambda表达式超详细总结_Code0cean的博客-CSDN博客_lambda表达式详细总结