一、为什么要使用lamda表达式
1、避免匿名内部类定义过多
2、让代码看起来更简洁
二、函数式接口
任何接口,如果只包含唯一一个抽象方法,那么它就是一个函数式接口
public interface Runable{
public abstract void run();
}
对于函数式接口,我们可以通过lamda表达式来创建该接口的对象
三、lamda表达式演变过程
1、外部类
2、静态内部类
3、局部内部类
4、匿名内部类
5、lamda表达式
public class TestLamda {
//静态内部类
static class Demo1 implements IDemo{
@Override
public void run() {
System.out.println("just run1");
}
}
public static void main(String[] args) {
//局部内部类
class Demo2 implements IDemo{
@Override
public void run() {
System.out.println("just run2");
}
}
IDemo demo = new Demo();
demo.run();
System.out.println("=========");
Demo1 demo1 = new Demo1();
demo1.run();
System.out.println("=========");
Demo2 demo2 = new Demo2();
demo2.run();
System.out.println("=========");
//匿名内部类,没有类的名称,必须借助接口或者父类
IDemo iDemo = new IDemo() {
@Override
public void run() {
System.out.println("just run3");
}
};
iDemo.run();
System.out.println("=========");
//将匿名内部类转变为lamda表达式
IDemo iDemo2= ()-> {
System.out.println("just run4");
};
iDemo2.run();
}
}
//定义一个函数式接口
interface IDemo {
void run();
}
//实现类
class Demo implements IDemo{
@Override
public void run() {
System.out.println("just run");
}
}
四、例子
public class TestLamda1 {
public static void main(String[] args) {
/* 匿名内部类
Lamda lamda= new Lamda() {
@Override
public void run() {
System.out.println("run");
}
};
lamda.run();*/
//lamda表达式
Lamda lamda=()-> {
System.out.println("run");
};
lamda.run();
}
}
interface Lamda{
void run();
}