Lambda 表达式使用详解:从匿名内部类到函数式接口,一篇文章手把手教会你

发布时间:2026/7/16 18:30:04
Lambda 表达式使用详解:从匿名内部类到函数式接口,一篇文章手把手教会你 目录一. Lambda 表达式有什么用二. 匿名内部类举例三. Lambda 表达式的标准格式与使用四. Lambda 表达式使用注意点五. 什么是函数式接口六. Lambda 表达式的省略写法七. Lambda 表达式省略写法简单展示一. Lambda 表达式有什么用Lambda 表达式在实际开发中主要目的往往是用来简化匿名内部类的书写。我们知道有些方法中的参数需要传递接口的实现类对象假如说我们为了传递类对象而单独去创建一个类会显得代码有些冗余所以这个时候我们往往会采用匿名内部类的形式去创建接口的实现类对象。那么此时我们将一段逻辑代码作为参数放到方法的参数列表中会显得不那么好看所以为了简化代码量让参数列表更简洁好看我们就可以采用 Lambda 表达式的方式来书写匿名内部类。二. 匿名内部类举例我先来展示一段匿名内部类的代码逻辑如下我随便定义了一个数组添加几个乱序的数现要对它们进行排序我可以调用 Arrays 中的 sort 方法排序该方法传递两个参数第一个参数传递要排序的数组第二个参数传递一个比较器对象。public class LambdaTest { public static void main(String[] args) { // 定义一个数组 Integer[] arr {1,4,8,0,9,6,7}; // 调用 Array 中的 sort 方法对数组中的数据排序 Arrays.sort(arr, new ComparatorInteger() { // 重写方法逻辑 Override public int compare(Integer o1, Integer o2) { return o1 - o2; } }); System.out.println(Arrays.toString(arr)); } }那么问题来了比较器接口 Java 已经提供了但它没有提供实现类怎么办呢我们能在 Java 源码中实现 Comparator 接口吗这种做法显然是不可行的所以这个时候我们就可以采用匿名内部类的形式创建一个 Comparator 接口的实现类对象并做相应的逻辑处理。运行上述代码我们就可以在控制台得到如下结果可以发现数组已经排好序了。三. Lambda 表达式的标准格式与使用Lambda 表达式的格式非常简单我们只需要将原本匿名内部类方法中的参数写入到 () 中将方法的执行逻辑写入 {} 即可中间使用固定格式 - 连接即可。使用 Lambda 表达式将上面匿名内部类的代码简化之后就变成了下面这个样子。可以看到在使用了 Lambda 表达式之后代码变得极为简介删掉了方法名Override注解还删掉了一对大括号只留下方法的参数和方法的执行逻辑。我们再次运行此方法仍然可以在控制台得到正确的结果这就是 Lambda 表达式的简单使用。四. Lambda 表达式使用注意点在使用 Lambda 表达式简化匿名内部类的书写时需要注意两个点。1Lambda 表达式主要用于简化匿名内部类的书写一般不应用于其他地方2并不是所有的匿名内部类都可以使用 Lambda 表达式来简化书写它只能简化函数式接口的匿名内部类的书写方式。五. 什么是函数式接口记住一句话就可以了有且仅有一个抽象方法的接口叫函数式接口接口上可以添加FunctionalInterface注解。例如我们刚才使用的 Compartor 接口它就是一个函数式接口我们看一下它的源码就可以知道如下图所示接口上就标注有 FunctionalInterface 注解。六. Lambda 表达式的省略写法通过上面的学习我们已经简单的了解明白了如何使用 Lambda 表达式简化函数式接口的匿名内部类写法。但我现在告诉你尽管 Lambda 表达式已经上面已经非常简化了其实在一些情况下Lambda 表达式本身的写法还可以继续省略但在省略时需要满足以下几点规则。1参数类型可以省略不写2如果只有一个参数参数类型省略不写同时 () 也可以省略3如果 Lambda 表达式的方法体只有一行大括号分号returen 同时省略不写注意是三个同时省略不写。七. Lambda 表达式省略写法简单展示基于上面的省略要求我们还可以对上面排序的代码继续简化我们先把原本的 Lambda 代码拿过来如下图第一步先看第一点参数类型省略不写省略之后如下所示第二点上述方法中两个参数所以 不能省略不做变化第三点方法体只有一行return{}; 同时省略不写就会变成下面这个样子此时我们在运行此方法仍然可以在控制台得到正确的运行结果如下图有些同学可能会觉得这样写可读性太差了也很正常等我们运用熟练了就习惯了。这里我还是要补充一句Lambda 表达式的使用在开发中还是较为常见的所以同学们还是要重视起来在以后的一些项目中你还是有可能经常会见到 Stream 流搭配 Lambda 表达式结合使用简化代码的所以在我们遇到的时候要能看得懂。