Lambda 表达式(2)

73 阅读2分钟

携手创作,共同成长!这是我参与「掘金日新计划 · 8 月更文挑战」的第23天,点击查看活动详情

今天继续熟悉一下 Lambda 表达式,昨天只是简单做了一个引入,确实认识到了 Lambda 表达式的简洁。今天继续深入......

Lambda 表达式语法

Lambda 表达式在 Java 语言中引入了一个 “->” 操作符,该操作符被称为 Lambda 表达式操作符或箭头操作符。操作符将 Lambda 分为了两个部分:

  • 左侧:指定了 Lambda 表达式需要的所有参数;
  • 右侧:指定了 Lambda 体,即 Lambda 表达式要执行的功能。

形似:

    //例1
    (someParams) -> someFunctions
    
    //例2
    (someParams) -> {someFunctions;}

Lambda 表达式重要特性

  • 可选类型声明:不需要声明参数类型,编译器可以统一识别参数值;
  • 可选的参数圆括号:一个参数无需定义圆括号,但无参或有多个参数时需要定义圆括号;
    //无参,无返回值,Lambda 表达式只需要一条语句
    public void example01() {
        Runnable runnable = () -> System.out.println("Runnable 运行!");
        runnable.run();
    }
结果:
    Runnable 运行!
    //一个参数,无返回值,Lambda 表达式写法
    public void example02() {
        Consumer<String> consumer = (x) -> System.out.println(x);
        consumer.accept("Hello Consumer!");
    }
结果:
    Hello Consumer//只有一个参数时,参数的小括号可以省略
    //上面的写法可以简化为以下
    public void example03() {
        Consumer<String> consumer = x -> System.out.println(x);
        consumer.accept("Hello Consumer!");
    }
结果:
    Hello Consumer
    //两个参数,Lambda 体中有多条语句
    public void example04() {
        Comparator<Integer> com = (x,y) -> {
            System.out.println("函数接口");
            return Integer.compare(x,y);
        };
        System.out.println(com.compare(2,4));
    }
结果:
    函数接口
    -1
  • 可选的大括号:如果主体只包含一个语句,就不需要使用大括号;
    //两个以上参数,有返回值,Lambda 体只有一个语句;return 和大括号都不用写
    public void example05() {
        Comparater<Integer> com = (x,y) -> Integer.compare(x,y);
        System.out.println(com.compare(4,2));
    }
结果:
    1
  • 可选的返回关键字:如果主体只有一个表达式返回值,编译器会自动返回,大括号需要指明表达式返回了一个数值。
    //Lambda 表达式的参数列表的数据类型可以不写(JVM 能通过上下文推断出数据类型,即“类型推理”)
    public void example06() {
        Comparator<Integer> com = (Integer x, Integer y) -> Integer.compare(x,y);
        System.out.println(com.compare(5,3));
    }
结果:
    1

类型推理:在执行 Java 编译程序时,JVM 根据程序的上下文推断出了参数的类型,Lambda 表达式依赖于上下文环境。

顺口溜:左右遇一括号省,左侧推断类型省,能省则省。

主要学习了一下 Lambda 表达式的语法,也就是在写代码时 Lambda 表达式该怎么用。Lambda 表达式主要就是使代码更简洁,所以书写的时候也是能省则省,所以有很多便捷语法,需要了解。但还是那句话,写得越少,就越难看懂......
希望本文能够帮到你,有错误,望指正!
我向你敬礼啊,Salute!