21、Lambda表达式(箭头函数)

1、为什么使用Lambda表达式

匿名内部类的一个问题是:如果匿名类的实现非常简单,比如仅包含一个方法的接口,则匿名类的语法可能看起来笨拙且不清楚。

在这些情况下,通常试图将功能作为参数传递给另外一种方法,例如,当某人要单击按钮时应采取什么措施。

Lambda表达式可以解决这个问题,即将功能视为方法参数,或将代码视为数据。

示例:接口仅有一个方法

public class Example01 {

    public static void main(String[] args) {

        Actor actor = new Actor() {
            @Override
            public void performance() {
                System.out.println("演员表演节目");
            }
        };
        actor.performance();
    }
}

interface Actor {
    void performance();
}

从上面的代码中可以看出:匿名内部类知识对Actor接口的实现,重点是强调其有表演节目的方法(行为),如果可以直接将表演节目的方法复制给actor对象的引用,使得actor对象的引用在调用接口方法时直接执行该行为,那么将大大地节省代码的编写量,而Lambda表达式可以实现以上的功能

2、什么使用Lambda表达式

2.1 lambda表达式语法

(参数类型1 变量1, 参数类型2 变量2,... 参数类型n, 变量n) -> {
    //代码块
    return 返回值;
}

用Lambda表达式实现

public class Example01 {

    public static void main(String[] args) {

        //函数式编程思想,用lambda语法实现
        Actor actor = () -> {
            System.out.println("演员表演节目");
        };

        actor.performance();
    }
}

interface Actor {
    void performance();
}

Lambda表达式只能使用在只有一个方法的接口上。只有一个方法的接口称之为函数式接口(Function interface)

3、lambda表达式的省略规则

  • 参数列表中的所有参数类型都可以省略
  • 如果仅有且仅有一个参数,()可以省略
  • 如果代码块中有且仅有一条语句,那么{}省略,此条语句后分号也省略
  • 如果代码块中有且仅有一条语句且是return语句,那么除了{}省略,此条语句后的分号省略以外,return关键字也需要省略【三者需要都省略】
public class Example01 {

    public static void main(String[] args) {

        //函数式编程思想,用lambda语法实现
        Actor actor = o -> 
    System.out.println(o);

        actor.performance("演员表演节目");
    }
}

interface Actor {
    void performance(Object o);
}
posted @ 2022-03-08 23:54  DarkSki  阅读(87)  评论(0编辑  收藏  举报