1.Lambda表达式简介
Lambda是一个匿名的函数(方法),允许把函数作为一个方法的参数。利用Lambda表达式可以写出更加简洁、灵活的代码。作为一种更紧凑的代码风格,使得Java语言的表达能力得到了提升。一般都是优化匿名内部类
2.Lambda表达式语法:
在Java语言中Lambda表达式中引入了操作符“->”,即Lambda操作符或箭头操作符,由它将Lambda分为两个部分:
- 左侧部分:指定了Lambda表达式中所需要的所有参数。
- 右侧部分:实现Lambda体,也就是Lambda表达式功能的实现。
3.基础语法与优化规则
(1)规则一:无参数、无返回值的抽象方法
方法参数小括号不能省略
public class Test1 {
@Test
public void test01() {
// I1 i1 = new I1() {
// @Override
// public void method() {
// System.out.println("传统使用匿名内部类的方式");
// }
// };
// i1.method();
I1 i1 = ()-> System.out.println("采用Lambda表达式的方式");
i1.method();
}
}
interface I1{
public void method();//无参数、无返回值的抽象方法
}
(2)规则二:一个参数,无返回值
@Test
public void test02(){
I1 i1 = (x)-> System.out.println("Lambda 输出:"+x);
i1.method(100);
}
interface I1{
public void method(int num);
}
//》》输出:Lambda 输出:100
注意:当Lambda只有一个参数时,参数的小括号可以省略。以上代码可以改为,如下:
I1 i1 = x-> System.out.println("Lambda 输出:"+x);i1.method(100);
(3)规则三:有多个参数时
当有多个参数,且Lambda体中有多条语句,如下:
@Test
public void test02(){
I1 i1 =(x, y) ->{
System.out.println("Lambda 输出:num1="+x+" --num2="+y);
return x+y;
} ;
int i=i1.method2(100,200);
System.out.println("i="+i);
}
interface I1{
public int method2(int num1,int num2);
}
//输出 Lambda 输出:num1=100 --num2=200》》i=300
注意:有多个参数,有返回值,若Lambda体中只有一条语句,return和大括号都可以省略不写
@Test
public void test03(){
I1 i1 = (x,y) ->(x+y);
int i=i1.method2(100,200);
System.out.println("x,y和为:"+i);
}
interface I1{
public int method2(int num1,int num2);
}
//x,y和为:300
(4)规则小结:
- 参数列表的数据类型可以不写,JVM会自动推断,即“类型推断”。
- 如果没有参数列表,则小括号不能省略。
- 如果参数列表只有一个,则小括号可以省略,只需要用一个参数名称即可。
- 如果方法体的代码只有一句,有返回值情况下,return和大括号可以省略;无返回值时,大括号可以省略。
- Lambda表达式不会生成单独的内部类文件。