第 3 章 Lambda表达式

本章内容

  • Lambda管中窥豹
  • 在哪里以及如何使用Lambda
  • 环绕执行模式
  • 函数式接口,类型推断
  • 方法引用
  • Lambda复合

在上一章中,你了解了利用行为参数化来传递代码有助于应对不断变化的需求。它允许你定义一段代码块来表示一个行为,然后传递它。你可以决定在某一事件发生时(例如单击一个按钮)或在算法中的某个特定时刻(例如筛选算法中类似于“重量超过150克的苹果”的谓词,或排序中自定义的比较操作)运行该代码块。一般来说,利用这个概念,你就可以编写更为灵活且可重复使用的代码了。

但你也看到了,采用匿名类来表示多种行为并不令人满意:代码十分啰唆,这会影响程序员在实践中使用行为参数化的积极性。本章会教给你Java 8解决这个问题的新工具——Lambda表达式。它能帮助你很简洁地表示一个行为或者传递代码。现在你可以把Lambda表达式看成匿名函数,它基本上就是没有声明名称的方法,但和匿名类一样,它也能作为参数传递给一个方法。

我们会展示如何构建Lambda,它的使用场合,以及如何利用它让代码更简洁。还会介绍一些新的东西,如类型推断以及Java 8 API中新增的重要接口。最后会介绍方法引用,这是个常常与Lambda表达式联合使用的新功能,非常有价值。

本章的行文思想就是教你如何一步一步地写出更简洁、更灵活的代码。本章结束时,我们会把所有教过的概念融合在一个具体的例子里:用Lambda表达式和方法引用逐步改进第2章中的排序例子,使之更加简明易读。这一章很重要,我们会在本章中大量使用贯穿全书的Lambda。