前言

  Lambda 表达式,也可称为闭包,它是推动 Java 8 发布的最重要新特性。λ表达式由三部分组成:参数列表,箭头(->),以及一个表达式或语句块。Lambda 允许把函数作为一个方法的参数(函数作为参数传递进方法中)。使用 Lambda 表达式可以使代码变的更加简洁紧凑。

什么是Lambda 表达式

  Lambda 表达式(lambda expression)是一个匿名函数,Lambda表达式基于数学中的λ演算得名,直接对应于其中的lambda抽象(lambda abstraction),是一个匿名函数,即没有函数名的函数。Lambda表达式可以表示闭包(注意和数学传统意义上的不同)。

Lambda 表达式语法

Lambda 等效的方法引用

(Apple a) -> a.getWeight() Apple::getWeight

() -> Thread.currentThread().dumpStack() Thread.currentThread()::dumpStack

(str, i) -> str.substring(i) String::substring

(String s) -> System.out.println(s) System.out::println

Lambda 表达式特点

  • 可选类型声明:不需要声明参数类型,编译器可以统一识别参数值。
  • 使用 Lambda 表达式可以使代码变的更加简洁紧凑。
  • 可选的参数圆括号:一个参数无需定义圆括号,但多个参数需要定义圆括号。
  • 可选的大括号:如果主体包含了一个语句,就不需要使用大括号。
  • 可选的返回关键字:如果主体只有一个表达式返回值则编译器会自动返回值,大括号需要指定明表达式返回了一个数值。

Lambda 表达式注意事项

  • Lambda 表达式主要用来定义行内执行的方法类型接口,例如,一个简单方法接口。在上面例子中,我们使用各种类型的Lambda表达式来定义MathOperation接口的方法。然后我们定义了sayMessage的执行。
  • Lambda 表达式免去了使用匿名方法的麻烦,并且给予Java简单但是强大的函数化的编程能力。

Lambda 表达式示例:

无参数,返回值为 info

() -> info
复制代码

接收一个参数(数字类型),返回其5倍的值

x -> 5 * x 
复制代码

接受2个参数(数字),并返回他们的差值

(x, y) -> x – y 
复制代码

接收2个int型整数,返回他们的和

(int x, int y) -> x + y 
复制代码

接受一个 string 对象,并在控制台打印,不返回任何值(看起来像是返回void)

(String s) -> System.out.print(s)
复制代码

  当然,上面只是简单的Lambda 表达式的应用。还有使用多个简单Lambda 表达式组成的复合 Lambda 表达式。例如: 函数复合、谓词复合、比较器复合等各种形式的组合起来的Lambda表达式。

总结

  本文简单的介绍了Java 8中的新特性--Lambda 表达式。总体来说还是比较容易的,也能很快的入门。针对项目中可以多加练习使用,能够使代码变的更加简洁紧凑。还是很值得学习的。