前言

各位小伙伴在源码或者其他某个地方肯定见到过形如 () -> 、() -> {} 的代码,说实话,我第一次见到这种代码的时候直接就是一脸懵逼,满脑子都是:啥啥啥!这写的都是啥!(不知道各位小伙伴有没有同样的感觉🤭)

说到这,各位小伙伴肯定就知道咱们今天要聊什么了~
没错!今天要聊的就是 Java 中的 Lambda 表达式,废话不多说,直接进入今天的正题⏩

Java Lambda 表达式

Lambda 表达式是 Java 8 中的一个新特性,也是推动 Java 8 发布的最重要的一个新特性。Lambda 表达式也可称为闭包,它允许我们把函数作为一个方法的参数(函数作为参数传递进方法中)来使用,Lambda 表达式的语法格式如下👇

(parameters) -> expression 或者是 (parameters) ->{ statements; }

上面的格式可能看起来比较费劲,那么咱们依然是用一个“猥琐”的写法来改写一下标准格式👇

(参数类型A 参数名称A, 参数类型B 参数名称B, …) -> { 具体代码 }

这次看起来是不是就明白多了😄 说白了 Lambda 表达式主要是由三部分组成的,分别是小括号、箭头、大括号,小括号里写的是方法的参数列表,语法与传统方法的参数列表一致(如果没有参数,就空着不用写;如果有多个参数,用逗号分隔);箭头是新引入的一个语法格式,代表指向动作;大括号里写的就是具体的逻辑代码了。

说完了标准格式,再来看看 Lambda 表达式的省略格式,省略格式的规则主要有以下几点:

  1. 小括号内的参数类型可以省略不写
  2. 如果小括号里有且仅有一个参数,那么小括号也可以省略不写
  3. 如果大括号里有且仅有一个语句,那么无论方法是否有返回值,大括号、 return 关键字、语句分号都可以省略不写。

咱们用数学的四则运算举个简单的例子~

/**
 * LambdaDemo 表达式
 * @description: LambdaDemo
 * @author: 庄霸.liziye
 * @create: 2021-12-30 14:55
 **/
public class LambdaDemo {

    public static void main(String[] args) {
        LambdaDemo lambdaDemo = new LambdaDemo();

        // 声明变量类型
        MathCalculation addition = (int a, int b) -> a + b;

        // 不声明变量类型
        MathCalculation subtraction = (a, b) -> a - b;

        // 标准格式
        MathCalculation multiplication = (int a, int b) -> { return a * b; };

        // 省略格式
        MathCalculation division = (int a, int b) -> a / b;

        System.out.println("加法:" + lambdaDemo.calculation(4, 2, addition));
        System.out.println("减法:" + lambdaDemo.calculation(4, 2, subtraction));
        System.out.println("乘法:" + lambdaDemo.calculation(4, 2, multiplication));
        System.out.println("除法:" + lambdaDemo.calculation(4, 2, division));

    }

    /**
     * 数学四则运算接口
     */
    interface MathCalculation {
        int calculation(int a, int b);
    }

    private int calculation(int a, int b, MathCalculation mathCalculation){
        return mathCalculation.calculation(a, b);
    }
}

通过上面这个例子我们可以看出,若想使用 Lambda 表达式也是有前提条件的:Lambda 表达式的作用是定义行内执行的方法类型接口(也就是说,想使用 Lambda 表达式就必须要有接口,并且要求接口有且仅有一个抽象方法),就像上面的例子一样,我们使用 Lambda 表达式定义的 MathCalculation 接口,实现了数学的四则运算。

这时候可能有些小伙伴会问:我们为什么要用 Lambda 表达式呢?其实也没有很特别的原因,使用 Lambda 表达式会让我们的代码变的更加简洁紧凑,瞬间提升代码逼格 ╰(°▽°)╯

上面的例子可能没有体现出来如何让代码变得整洁,那么请往下看(假如此时需要循环遍历集合中的值)👇

import java.util.Arrays;
import java.util.List;

/**
 * LambdaDemo 表达式
 * @description: LambdaDemo
 * @author: 庄霸.liziye
 * @create: 2021-12-30 14:55
 **/
public class LambdaDemo {

    public static void main(String[] args) {
        List<String> list = Arrays.asList("我", "在", "人民广场", "吃着炸鸡");

        // 传统方法循环list集合
        for (String listValue : list) {
            System.out.println(listValue + " ");
        }
        
        System.out.println("-------我是分割线-------");
        
        // 使用lambda表达式循环list集合
        list.forEach(listValue -> System.out.println(listValue + " "));
    }
}

这次是不是一下就看出来了,此时传统的遍历方式就显得没有那么整洁,也没有那么有逼格了 (●’◡’●)

P.S. 传统的写法和 Lambda 表达式没有谁优于谁的说法。Lambda 表达式作为函数式编程虽然可以帮助我们简化代码,提高代码的精简度,但是如果接触 Lambda 表达式不多的话,使用起来就麻烦一些了,这时候反而使用传统写法效率更高(效率指的是编码效率)。所以说,选择适合自己的,才是最好的 🤞

小结

本人经验有限,有些地方可能讲的没有特别到位,如果您在阅读的时候想到了什么问题,欢迎在评论区留言,我们后续再一一探讨🙇‍

希望各位小伙伴动动自己可爱的小手,来一波点赞+关注 (✿◡‿◡) 让更多小伙伴看到这篇文章~ 蟹蟹呦(●’◡’●)

如果文章中有错误,欢迎大家留言指正;若您有更好、更独到的理解,欢迎您在留言区留下您的宝贵想法。

你在被打击时,记起你的珍贵,抵抗恶意;
你在迷茫时,坚信你的珍贵,抛开蜚语;
爱你所爱 行你所行 听从你心 无问东西

更多推荐

大聪明教你学Java | 深入浅出聊 Java Lambda 表达式