首先理解一个词,语法糖。所谓语法糖就是英国计算科学家 Peter John Landin 发明的术语,其意义为在计算机的语言中添加某种语法,这种语法对于语言的功能是没有影响的,但更方便程序员的使用。而语法糖的意义就是让程序更加的简洁和有更高的可读性。
Lambda 表达式的本质上就是一个语法糖,由编译器推断并帮助程序员把其转换包装为常规的代码,通过这样来让程序员写更少的代码来实现同样的功能,但其是有双面性的,一方面他增加了可读性也更简洁,但是如果滥用的话就会导致代码虽然简洁但是理解起来需要额外花费精力,让维护变得困难。所以一般来说,超过三行的逻辑就不建议使用 Lambda 表达式。
Lambda 是 Java SE 8中引入的一个非常重要的特性,其允许程序员通过表达式来替换功能接口,Lambda 表达式就和方法一样,它提供了一个正常的参数列表和一个使用这些参数的种主体。于此同时 Lambda 还对 Collection 进行了增强,其添加了两个对集合数据进行批量操作的包 java.util.function 和 java.util.stream。 Stream 就和 iterator 差不多,但是会多很多附加功能,更强大便捷。
语法
基本语法有两种格式:
(parameters) -> expression
或 (parameters) ->{ statements; }
从 for 循环入手,之前的形式就不说了,来看看 Lambda 能做些什么
代码语言:txt复制// 就比如说,循环输出一些东西
allData.forEach((single) -> System.out.print(single))
// 或 使用双冒号操作
allData.forEach(System.out::println);双冒号操作符(double colon operator):其在 Java 8 中被用作方法引用(method reference), 方法引用是与 Lambda 表达式相关的一个重要特性,它提供了一种不执行方法的方法。
Method References You use lambda expressions to create anonymous methods. Sometimes, however, a lambda expression does nothing but call an existing method. In those cases, it’s often clearer to refer to the existing method by name. Method references enable you to do this; they are compact, easy-to-read lambda expressions for methods that already have a name.
然后下面是一些 Java 8 中的方法引用的语法:
- 静态方法引用(static method)语法:classname::methodname 例如:Person::getAge
- 对象的实例方法引用语法:instancename::methodname 例如:System.out::println
- 对象的超类方法引用语法: super::methodname
- 类构造器引用语法: classname::new 例如:ArrayList::new
- 数组构造器引用语法: typename[]::new 例如: String[]:new
以上只是从最开始 Lambda 讲至 Java 8 的方法引用特性。下一篇会进行 Lambda 中集合部分的具体使用。
我正在参与2023腾讯技术创作特训营第三期有奖征文,组队打卡瓜分大奖!


