lambda表达式
1.什么是lambda表达式
Lambda表达式(也称闭包),Lambda表达式允许函数作为一个方法的参数(函数作为参数传递到方法中),或者把代码看成数据。Lambda表达式可以简化函数式接口的使用。函数式接口就是一个只具有一个抽象方法的普通接口,像这样的接口就可以使用Lambda表达式来简化代码的编写。
本质:一个匿名函数去实现接口中的方法。
Lambda表达式只能实现函数式接口—接口有且只有一个抽象方法
2.lambda表达式怎么写
// 接口定义
interface demo3{
int fun(int a);
}
// lambda表达式实现接口的方法
public static void main(String[] args) {
demo3 demo3 = (a) -> {
System.out.println("i am demo3");
return a+a;
};
System.out.println(demo3.fun(5));
}
3.lambda表达式的精简
1.接口的方法中定义返回值类型和参数的类型,所以在lambda表达式中参数的类型可以不写,甚至有一个参数的话,小括号可以省略
2.方法体中如果只有一个语句,就可以把大括号省略,但如果唯一的语句是返回的语句,那也不用写return
demo3 demo4 = a->a*a;
System.out.println(demo4.fun(6));
4.函数引用
如果在lambda表达式中需要处理的逻辑比较复杂,一般会单独写一个方法,在lambda表达式中直接引用这个方法即可,成为函数引用。
方法调用 在->后写 方法名(参数)即可。
函数引用:引用一个已经存在的方法,使其替代lambda表达式完成接口的实现,已经存在的方法的参数列表和返回值必须和接口中的方法一样。
4.1.main函数内方法调用
public class text {
interface demo1{
void fun();
}
static void fun(){
System.out.println("我是的其他方法");
}
public static void main(String[] args) {
// 由于都在main函数中,可以直接写函数名
demo1 demo1 = ()->fun();
demo1.fun();
}
}
4.2.静态方法和非静态方法引用
class Class1{
public static void fun(){
System.out.println("我是静态方法");
}
public void fun2(){
System.out.println("我是非静态方法");
}
}
public class text {
interface demo1{
void fun();
}
public static void main(String[] args) {
// 给Class1实例化
Class1 class1 = new Class1();
// 静态方法引用用类名::(静态)方法
demo1 demo1 = Class1::fun;
demo1.fun();
// 非静态方法引用用对象::(非静态)方法
demo1 demo2 = class1::fun2;
demo2.fun();
}
}