体验λ
表达式让我们用一个小例子来体验 lambda 表达式;
我们定义了一个只有一个方法添加的计算接口;
公开课程序 {
public static void main(String[] args) {
Cal c1=new Cal() {
@Override
public int add(int a, int b) {
返回 A+B;
}
};
int c=c1.add(1,2);
System.out.println(c);
}
}
接口校准{int
add(int a,int b);
}
这是我们之前的实现,匿名内类,然后调用执行;
我们现在使用 lambda 表达式重写:
公开课程序 {
public static void main(String[] args) {
Cal c1=(int a,int b) ->{return a+b; };
int c=c1.add(1,2);
System.out.println(c);
}int
add(int a,int b){
返回 A+B;
}
}
接口校准{int
add(int a,int b);
}
匿名内部类,直接改为:
Cal c1=(int a,int b) ->{return a+b; };
更简洁;
是不是感觉lambda表达式很强大,
?
接下来,我们来看看 lambda 表达式的语法;
Lambda 表达式语法
让我们看看这个 lambda 表达式:
(int a,int b) ->{return a+b; };
这个本质是一个功能;
常规函数如下所示:int
add(int a,int b){
返回 A+B;
}
有返回值、方法名称、参数列表和方法主体
对于 lambda 表达式函数,只有一个参数列表和方法主体;
(参数列表) -> { 方法体 }
( ) :用于描述参数列表;
{ } : 用于描述方法主体;
->:Lambda运算符,可以称为箭头符号,或转到
注意:
1. Lambda 表达式要求接口是函数接口。
2. lambda 表达式引用的外部变量必须是事实的最终变量。也就是说,初始化后该值不会再次更改。(您无法更改 lambda 中外部变量的值。您也不能引用将在 lambda 中外部更改的值,无论该值是在执行 lambda 表达式之前还是之后在外部更改的)。
3. 声明与方法局部变量同名的参数是违法的
或与 lambda 表达式中方法的局部变量同名的局部变量。
4. 两个同名的局部变量不能
在方法中定义,因此 lambda 表达式中不能有同名的局部变量。
5. 在 lambda 表达式中使用 this 关键字是指 this
创建此 lambda 表达式的方法所属的类的参数。如:
公共类应用程序{
public void init(){
操作侦听器 侦听器 = 事件 -> {
System.out.println(this.toString());
}
}
}
此处调用 Application 对象的 toString 方法,而不是 ActionListener 接口的实例对象的方法。
Lambda 表达式语法详细介绍
我们举个例子,接口方法(无参数、单参数、双参数)X(带返回值,无返回值)列出了这六种情况:
接口 If1{
/*** 无参数
,无参数
返回值 */
无效测试();
}
接口 If2{
/**
* 单个参数没有
返回值 * @param a
*/
无效测试(国际A);
}
接口 If3{
/**
* 两个参数没有
返回值 * @param a
* @param b
*/
无效测试(int a,int b);
}
接口 If4{
/**
* 没有参数有
返回值 * @return
*/
int test();
}
接口 If5{
/**
* 单个参数具有
返回值 * @param a
* @return
*/int
test(int a);
}
接口 If6{
/**
* 多个参数有
返回值 * @param a
* @param b
* @return
*/int
test(int a,int b);
}
我们使用 lambda 表达式实现它:无
参数,无返回值
If1 if1=()->{
System.out.println(“No parameters, no return value”);
};
if1.test();
单个参数没有返回值
If2 if2=(int a)->{
System.out.println(“Single parameter no return value a=”+a);
};
if2.test(3);
两个参数都没有返回值
If3 if3=(int a,int b)->{
System.out.println(“两个参数没有返回值 a+b=”+(a+b));
};
if3.test(2,3);
没有参数具有返回值
If4 if4=()->{
System.out.print(“没有参数有返回值”);
返回 100;
};
System.out.println(if4.test());
单个参数具有
返回值If5 if5=(int a)->{
System.out.print(“单个参数具有返回值”);
返回 a;
};
System.out.println(if5.test(200));
多个参数具有返回值
If6 if6=(int a,int b)->{
System.out.print(“多个参数有返回值”);
返回 A+B;
};
System.out.println(if6.test(1,2));
运行输出:无
参数,无返回值
单个参数没有返回值 a
=3两个参数都没有返回值 a+b
=5没有参数的返回值为
100A 单个参数的返回值为
200多个参数的返回值为 3