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();}}
