- 从企业级开发到云原生微服务:Spring Boot实战
- 汪云飞等
- 447字
- 2021-04-04 11:26:45
2.2 Lambda表达式
Lambda表达式是一种匿名函数,在函数式编程里,它可以作为参数进行传递。
2.2.1 了解Lambda表达式
下面看一个简单的例子,先用“老式的”匿名类定义,再使用等同的Lambda表达式定义。
(1)匿名类。
![](https://epubservercos.yuewen.com/E5E2EB/18096059808236406/epubprivate/OEBPS/Images/37792_22_01.jpg?sign=1739403685-3bRp9DkzhW6y0vVv8mNsBoGKkuZ0V8j1-0-9536ec1e9ff4d62d696e5243bcc50462)
(2)Lambda表达式。
![](https://epubservercos.yuewen.com/E5E2EB/18096059808236406/epubprivate/OEBPS/Images/37792_22_02.jpg?sign=1739403685-eXm2WpxXVevkQPunc7EhpiArOj3DwOea-0-ac57c7d2ea9601ac6120fc949e132836)
从上面的例子可以看出,Lambda表达式分为三部分。
◎左侧:Lambda参数列表(Person person1, Person person2),等同于匿名类的compare方法的参数。
◎中间:“->”,用来分开Lambda参数和Lambda体。
◎右侧:Lambda体 person1.getWeight().compareTo(person2.getWeight()),等同于匿名类的compare方法的返回值。
Lambda表达式还有以下规则。
(1)Lambda表达式可以有0到多个参数,如:
◎()->{}。
◎(Integer i)->"wyf"。
◎(Integer i, Integer j)->{return"wyf";}。
(2)Java编译器有类型推断(Type Inference)的能力,因而Lambda参数的类型可以省略,如:
![](https://epubservercos.yuewen.com/E5E2EB/18096059808236406/epubprivate/OEBPS/Images/37792_23_01.jpg?sign=1739403685-YoagE0KW6shGyejcnpOCBWlZLtvHVZud-0-a175b195ac7faf8593357c714ba5a2ef)
(3)若Lambda只有一个参数,则可以省略圆括号,如a->a+1。
(4)Lambda体需要用花括号括起来,如果Lambda体内只有一句表达式,则可以省略花括号。
(5)在Lambda体中如果使用return,则需要使用花括号括起来,如()->{return"wyf";}。
2.2.2 把Lambda表达式作为参数
Lambda表达式可以像参数一样传递给方法,示例如下。
![](https://epubservercos.yuewen.com/E5E2EB/18096059808236406/epubprivate/OEBPS/Images/37792_23_02.jpg?sign=1739403685-f54baGiwD6KxGYUPv1JnvikKBawcZFHe-0-9f5f2c8d76b4ab7cc72d906d02da33ac)
a.Lambada表达式作为sort方法的参数,是Comparator函数接口的实现。
b.Lambada表达式作为forEach方法的参数,是Consumer函数接口的实现。
Person类的定义如下。
![](https://epubservercos.yuewen.com/E5E2EB/18096059808236406/epubprivate/OEBPS/Images/37792_23_03.jpg?sign=1739403685-R591LGRCXjww8gZ2iMXGXJ4aHoC95FQP-0-f04a9e6b9f16260fabe25f0a570be7da)
![](https://epubservercos.yuewen.com/E5E2EB/18096059808236406/epubprivate/OEBPS/Images/37792_24_01.jpg?sign=1739403685-RwWphBPpwoILBpVojXAhZrXl3W9UC8L9-0-62a973392e90bc790a57f694d6d8c2b8)
Gender的定义如下。
![](https://epubservercos.yuewen.com/E5E2EB/18096059808236406/epubprivate/OEBPS/Images/37792_24_02.jpg?sign=1739403685-7ZnFrHg2fmE0k7umtdAqtIjQ5tw5od0X-0-daf3ca41c13582d4336a413f9d7f0453)