Lambda表达式
Lambda表达式是JDK1.8之后的新特性,它的出现就是为了避免匿名内部类的定义,它属于函数式编程的概念。
函数式接口(Functional Interface)是Java8 Lamda表达式的关键。
函数式接口的定义:
- 任何接口,如果只含有唯一一个抽象方法,它就是一个函数式接口。
对于函数式接口,我们可以通过lambda表达式来简化创建它的匿名实现内部类。
public class LambdaTest01 {
//静态内部类
static class Function2 implements IFunction {
@Override
public void function(int arg) {
System.out.println("静态内部类类执行实现方法,参数为" + arg);
}
}
public static void main(String[] args) {
//1.实现类
IFunction iFunction1 = new Function1();
iFunction1.function(1);
//2.静态内部类
IFunction iFunction2 = new Function2();
iFunction2.function(2);
//3.局部内部类
class Function3 implements IFunction {
@Override
public void function(int arg) {
System.out.println("局部内部类类执行实现方法,参数为" + arg);
}
}
IFunction iFunction3 = new Function3();
iFunction3.function(3);
//4.匿名内部类
IFunction iFunction4 = new IFunction() {
@Override
public void function(int arg) {
System.out.println("匿名内部类类执行实现方法,参数为" + arg);
}
};
iFunction4.function(4);
//5.lambda方式
IFunction iFunction5 = (int arg) -> {
System.out.println("lambda表达式实现方法,参数为" + arg);
};
iFunction5.function(5);
}
}
//定义一个函数式接口
interface IFunction {
void function(int arg);
}
//实现类 与分java文件写一致
class Function1 implements IFunction {
@Override
public void function(int arg) {
System.out.println("实现类执行实现方法,参数为" + arg);
}
}
上述代码,就是为了实现对方法实现的一步步简化,重新写实现类–》静态内部类–》局部内部类–》匿名内部类–》lambda表达式,这都是一步步的简化,这也展现了lambda表达式的简化功能。上述是演示了带参数的方法,无参数的方法也十分好实现,博主不再演示代码。
lambda表达式还有简化方式
原代码:
IFunction iFunction5 = (int arg) -> {
System.out.println("lambda表达式实现方法,参数为" + arg);
};
iFunction5.function(5);
- 简化参数类型
//1.简化参数类型
IFunction iFunction6 = (arg) -> {
System.out.println("lambda表达式实现方法,参数为" + arg);
};
iFunction5.function(6);
- 简化参数括号
//2.简化参数括号
IFunction iFunction7 = arg -> {
System.out.println("lambda表达式实现方法,参数为" + arg);
};
iFunction5.function(7);
- 简化方法体括号
//3.简化方法体括号
IFunction iFunction8 = arg -> System.out.println("lambda表达式实现方法,参数为" + arg);
iFunction5.function(8);
注意:
- 使用lambda表达式的前提是,实现函数式接口。
- 使用lambda表达式简化参数类型的时候,要么把参数列表的类型全部去掉,要么都不去掉。
- 使用lambda表达式简化参数列表括号时,要满足参数只有一个的条件,否则不能去掉,没有参数或者多个参数时都不能去掉。
- 使用lambda表达式简化方法体括号时,要满足实现代码只有一行,如有多行代码实现,不能去掉方法体的
{}
。