Lambda表达式
为什么引入lambda表达式?
- 避免内部类定义过多
- 去掉无意义代码,只留下核心逻辑
函数式接口
定义:任何借口,如果只包含唯一一个抽象方法,那么它就是一个函数式接口。
对于函数式接口,可以通过lambda表达式来创建该接口的对象。
public class lambda {
//3.静态内部类,把刚才实现的内部类粘贴过来加上static关键字
static class micah2 implements milo{
@Override
public void lam() {
System.out.println("milo is working,too...");
}
}
public static void main(String[] args) {
milo m =new micah();
m.lam();
micah2 m1=new micah2();
m1.lam();
//4.局部内部类
class micah3 implements milo {
@Override
public void lam() {
System.out.println("milo is working...3");
}
}
micah3 m2=new micah3();
m2.lam();
//5.匿名内部类,没有类的名称,必须借助接口或者父类实现
m= new milo() {
@Override
public void lam(){
System.out.println("milo is working...4");
}
};
m.lam();
/*************************/
//用lambda简化
//!!!需提前将m声明为接口类型 在最上方有一个句子:milo m =new micah();
m = () -> {
System.out.println("milo is working...5");
};
//后续需要调用!lambda只起到一个实现接口的作用
m.lam();
}
}
//1.定义函数式接口
interface milo{
void lam();
}
//2.实现类
class micah implements milo{
@Override
public void lam() {
System.out.println("milo is working...");
}
}
从2到5是一个不断简化的过程,在简化的过程中,实现单一功能的类,由常见的外部定义、实例化,到静态内部定义与实例化,再到成为一个局部类,成为一个匿名内部类,最后使用lambda表达式完成完全的简化,无需类定义即可完成对单一函数接口的实现,极大简化了代码量,并且无需查找上下文,一目了然。
在实现匿名内部类时,也会提示:

lambda的继续简化
是的,lambda在简化了函数型接口的实现后,自己还能继续简化。
public class lambda2 {
public static void main(String[] args) {
//lambda 表示简化
merry m = (int a)->{
System.out.println("Merry Christmas!"+a);
};
//no 1. 简化参数类型
m = (a)->{
System.out.println("Merry Christmas!"+a);
};
//no 2. 简化括号
m = a -> {
System.out.println("Merry Christmas!"+a);
};
//no 3. 简化大括号 (代码只有一行)
m = a -> System.out.println("Merry Christmas!"+a);
m.merrychris(2);
}
}
interface merry{
public void merrychris(int a);
}
仅有一行代码时才可以对大括号进行简化
多个参数也可以去掉参数类型,但是要雨露均沾,不能独宠。且必须加上括号!
lambda表达式只能用于简化函数式接口,不能简化内含多个抽象函数的接口!
浙公网安备 33010602011771号