Lambda表达式
Lambda表达式

Lambda表达式

Lambda概述

Lambda表达式是 JDK8 开始后的一种新语法形式。

作用:简化匿名内部类的代码写法。

Lambda表达式的简化格式

() -> {}
(匿名内部类被重写方法的形参列表) -> {
    被重写方法的方法体代码}
注:-> 是语法形式,无实际含义

注意:Lambda 表达式只能简化函数式接口的匿名内部类的写法形式

什么是函数式接口?

  • 首先必须是接口,其次接口中有且仅有一个抽象方法的形式
  • 通常我们会在接口上加上一个@FunctionalInterface注解,标记该接口必须是满足函数式接口

示例:

public class lambda1 {

    public static void useInterA(InterA interA){
        interA.show();
    }

    public static void main(String[] args) {
        // 这里是匿名内部类的实现方式
        useInterA(new InterA() {
            @Override
            public void show() {
                System.out.println("匿名内部类重写后的show方法");
            }
        });

        System.out.println("========================================");

        // 这里是Lambda的实现方式
        useInterA(() ->{
            System.out.println("lambda表达式重写后的show方法");
        });
    }
}

@FunctionalInterface
interface InterA{
    void show();
}

Lambda表达式的省略写法

  • 参数类型可以省略不写。
  • 如果只有一个参数,参数类型可以省略,同时 () 也可以省略。
  • 如果Lambda表达式的方法体代码只有一行代码
    • 可以省略大括号不写,同时要省略分号
    • 此时,如果这行代码是return语句,必须省略return不写,同时也必须省略 “;” 不写

方法引用(Method Reference)

方法引用是 JDK8 开始出现,主要作用是对 lambda 表达式进行进一步简化。

  • 方法引用是使用一对冒号 ::
  • 通过方法的名字来指向一个方法
  • 可以使语言的构造更紧凑简洁,减少冗余代码

给出一个 list 集合,并用 lambda 表达式进行遍历打印:

亮黄色区域提示我们可以用方法引用替换 lambda 表达式:


方法引用具有可推导可省略原则,省略参数。

此外,对于方法引用,静态方法为 类名::方法名;非静态方法为 对象名::方法名。

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

index