前言
Lambda表达式让java8的代码更加简洁,特别是处理一些复杂的集合运算的时候,这些都得益于java8的新特性–Lambda表达式,很多小伙伴,都会使用,但是有些时候还是一知半解,本文期望于帮助大家答疑解惑.
Lambda表达式介绍
简单来说,Lambda表达式提供了一种“将函数作为参数传递进方法中”的方式。这里你可以理解为,lambda表达式将一段代码(方法)像数据一样传递,可传递的代码(方法)。
还有,是Java开发更加简洁紧凑。
Lambda表达式接口要求:只能有一个抽象方法
Lambda表达式可以使接口的实现更加的简洁,但并不是所有的接口都可以用lambda表达式实现,这种接口只能定义一个需要实现的抽象方法。
Java8中 我们知道,系统内置的函数式接口都有@FunctionalInterface注解,打开注解的定义其实有一条:Conceptually, a functional interface has exactly one abstract method. 大家有兴趣可以看一下。
Lambda表达式基础语法
谈完接口我们了解一下基础语法,Lambda表达式我这里称之为三要素:
1. 匿名函数 :注意这点,函数名字并不主要,你在使用过程中,根本看不到它
2. 参数
3. 方法体
大家常见符号:
():用来描述参数列表
{} :用来描述方法体
-> :运算符 ,可以读做 goes to
Lambda表达式语法精简
这里我们以一个最简单的java8内置的函数式接口举例:
Predicate, 参数类型 T ,返回值 boolean
BiFunction<T, U, R> 参数T,U 返回值R
1. 可选的 参数类型
参数类型可不声明,因为在函数式接口的定义中已经定义了参数的数量和类型,所以,lambda表达式中,可以省略参数的类型
这里注意的是,要省略,必须全部省略,部分参数类型省略会报错的。
如下图:
2. 参数圆括号
如果参数列表中,参数的数量只有一个,则圆括号可以省略,其他时候不行。
3. 方法大括号:
如果方法主体只有一条语句,就不需要使用大括号,其他情况不行。
这个就不做演示了,大家应该都清楚。
4. 返回关键字 return
如果方法体唯一的一条语句是一个返回语句,则省略大括号的同时,必须省略return。
有了上述关于lambda表达式的基础语法 和 精简的规则,相信你在使用过程中会清晰很多。
方法引用
这里分两个介绍: 方法引用 和 构造方法引用
1.方法引用:
可以快速将一个lambda表达式的实现指向一个已经实现的方法。
语法规则:方法的隶属者::方法名
这里解释下方法隶属者,比如静态方法,隶属者是class,实例方法,隶属者 类实例。
注意:1.参数的数量和类型,必须和函数式接口中定义的方法一致
2.返回值得类型一定要和函数式接口中定义的方法一致
如图:
2.构造方法引用
其实与上面类似,只是调用的是构造方方法
总结
Lambda的知识就讲到这里了,想要熟练掌握,还是建议多多练习,毕竟coding是技能,需要刻意练习,才能融会贯通,后续更新一些系统常用的stream流式计算的例子,方便大家查询和使用。