^ _ ^
Lambda表达式
为什么需要lambda表达式?
当我们实现只定义了一个方法的接口时,使用匿名类可能会看起来比较笨重。如下段代码所示,匿名类需要6行代码实现的功能,使用lambda表达式后只需要一行代码。所以,Lambda表达式是为了简化只有一个方法接口的实现而提出的特性。
1 | public class AnonymousVersusLambda { |
Lambda表达式如何使用
- 定义只有一个方法的接口,不妨设为
返回值 方法名(参数列表)
- 通过lambda表达式定义该接口方法的实现:
接口 = (参数列表)->{实现代码}
实现一个泛型接口为例:
1 | public class GenericLambda { |
函数式接口
函数式接口指只定义了一个方法的接口。Jdk1.8在java.util.function
包中提供了大量函数式接口。我们可以在特定情况下联合使用这些接口和lambda表达式,这样就不需要自己定义接口了。
所有的函数式接口都用@FunctionalInterface
进行注解。
1. Consumer接口
消费型接口,拥有一个输入参数,无返回值。
1 | Consumer<Person> myConsumer = (p)->{ |
2. Supplier接口
生产型接口,无输入参数,有一个返回值。
1 | static Person createPerson(){ |
3. Predicate接口
检测型接口,拥有一个输入参数,返回值为布尔类型。
1 | Predicate<Person> myPredicate = (p)->{ |
4. Function接口
函数型接口,拥有一个输入参数,一个返回值。
1 | Function<Person,Integer> myFunction = (p)->{ |
流式编程
参考资料
Java Tutorial : https://docs.oracle.com/javase/tutorial/java/javaOO/lambdaexpressions.html