
上QQ阅读APP看书,第一时间看更新
1.5 Lambda表达式
Lambda表达式是一个匿名函数(指的是没有函数名的函数),它基于数学中的λ演算得名,直接对应于其中的Lambda抽象。Lambda表达式可以表示闭包(注意和数学传统意义上的不同)。
Lambda表达式允许把函数作为一个方法的参数。Lambda表达式的基本语法如下所示:

或

Lambda的使用方法如下例所示:

以上这种写法中,i的类型由编译器推测出来的,当然,也可以显式地指定类型,如下例所示:

在Java8以前,Java语言通过匿名函数的方法来代替Lambda表达式。
对于列表的排序,如果列表里面存放的是自定义的类,那么通常需要指定自定义的排序方法,传统的写法如下所示:

采用Lambda表达式后,写法如下所示:

或

显然,采用Lambda表达式后,代码会变得更加简洁。
Lambda表达式是通过函数式接口(只有一个方法的普通接口)来实现的。函数式接口可以被隐式地转换为Lambda表达式。为了与普通的接口区分开(普通接口中可能会有多个方法),Java8新增加了一种特殊的注解@FunctionalInterface。下面给出一个函数式接口的定义:
