从企业级开发到云原生微服务:Spring Boot实战
上QQ阅读APP看本书,新人免费读10天
设备和账号都新为新人

2.2 Lambda表达式

Lambda表达式是一种匿名函数,在函数式编程里,它可以作为参数进行传递。

2.2.1 了解Lambda表达式

下面看一个简单的例子,先用“老式的”匿名类定义,再使用等同的Lambda表达式定义。

(1)匿名类。

(2)Lambda表达式。

从上面的例子可以看出,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参数的类型可以省略,如:

(3)若Lambda只有一个参数,则可以省略圆括号,如a->a+1。

(4)Lambda体需要用花括号括起来,如果Lambda体内只有一句表达式,则可以省略花括号。

(5)在Lambda体中如果使用return,则需要使用花括号括起来,如()->{return"wyf";}。

2.2.2 把Lambda表达式作为参数

Lambda表达式可以像参数一样传递给方法,示例如下。

a.Lambada表达式作为sort方法的参数,是Comparator函数接口的实现。

b.Lambada表达式作为forEach方法的参数,是Consumer函数接口的实现。

Person类的定义如下。

Gender的定义如下。