Lamda 希腊字母表中排序第11位的字母,英语名称为lamda
避免匿名内部类定义过多
其实质属于函数式编程的概念
(params) -> expression[表达式]
(params)->statement [语句]
(params)-> {statements}
为什么要使用lambda表达式:
1)避免匿名内部类 过多
2)可以让你的代码看起来更整洁
3)去掉了一堆没有意义的代码,只留下了核心部分
函数式接口:
1)任何接口,如果只包含唯一一个抽象方法,那么他就是一个函数式接口
//这个接口只含有一个抽象方法
interface lambda{
void method();
}
2)对于函数式接口,我们可以通过lambda表达式来创建该接口的对象
代码演示lambda的进化过程:
public class Test {
public static void main(String[] args) {
//1、最传统的实现方式
Like like=new Like();
like.lambda();
new Like2().lambda();//实现静态内部类的方式
//3、局部内部类,方法里面的类
class Like3 implements Ilike{
@Override
public void lambda() {
System.out.println("局部内部类实现了");
}
}
new Like3().lambda();
//4、匿名内部类,没有类的名称,必须借助接口或者父类
//必须声明接口,然后通过匿名内部类的实现调用方法
Ilike like4;
like4=new Ilike() {
public void lambda() {
System.out.println("实现了匿名内部类的方式");
}
};
like4.lambda();
//5、简化4的方式,lambda的方式实现
like4=()->{
System.out.println("实现了lambda的方式");
};
like4.lambda();
}
//2、静态内部类
static class Like2 implements Ilike{
@Override
public void lambda() {
System.out.println("实现了静态内部类的方式");
}
}
}
//定义一个函数式接口
interface Ilike{
void lambda();
}
//写一个实现类
class Like implements Ilike{
@Override
public void lambda() {
System.out.println("实现了lambda 1");
}
}
lambda表达式的实例:
由下面这个例子,我们可以看到:
1)lambda表达式只能有一行的代码的情况下才可以去掉花括号,如果有多行,请用花括号包括
2)前提是接口必须为函数式接口
3)多个参数也可以去掉参数类型,要去掉都去掉,参数只有一个的时候可以省略括号,但是大于等于两个以上必须加上括号
public class Test {
public static void main(String[] args) {
// 1、匿名内部类的方式
Ilove love=new Ilove() {
public void love(int a, int b) {
System.out.println("匿名内部类"+a+b);
}
};
//2、简化为lambda的方式,和上面的比较一下,增加了什么,删除了什么
love=(int a, int b)-> {
System.out.println("匿名内部类"+a+b);
};
//3、再简化,发现可以省掉参数的类型声明
love=(a, b)-> {
System.out.println("匿名内部类"+a+b);
};
//4、在3的基础上再简化
love=(a, b)-> System.out.println("匿名内部类"+a+b);
//5、代码有两行的情况不能省略掉花括号
love=(a, b)-> {
System.out.println("匿名内部类"+a+b);
a=b;
};
love.love(1, 3);
}
}
interface Ilove{
void love(int a,int b);
}