本书结构

本书以范例的形式编写和组织内容。但在讨论涉及 lambda 表达式、方法引用以及流的范例时,有时也会涉及其他内容。因此,前 6 章将介绍相关概念,不过读者无须以任何特定的顺序阅读。

各章主要内容如下。

  • 第 1 章将介绍 lambda 表达式和方法引用的基础知识,然后讨论接口的新特性,包括默认方法和静态方法。此外,还将定义“函数式接口”,并解释它对于理解 lambda 表达式的重要性。
  • 第 2 章主要介绍 Java 8 引入的 java.util.function 包,它包括 ConsumerSupplierPredicate 以及 Function 这四类特殊的函数式接口,它们的应用贯穿于整个标准库。
  • 第 3 章将介绍流的概念及其表示抽象的方法。流支持对数据进行转换和过滤,而非迭代地进行处理。这一章的范例将讨论与流相关的映射、过滤、归约等概念,它们与第 9 章介绍的并行和并发有密切的关系。
  • 第 4 章主要介绍流数据的排序,并讨论如何将其转换为集合。这一章还将介绍分区和分组,它们将一般意义上的数据库操作转换为简单的库调用。
  • 第 5 章是综合性的一章。在掌握 lambda 表达式、方法引用以及流的用法之后,读者将学习如何综合运用它们来解决某些有趣的问题。这一章还将讨论惰性、延迟执行、闭包复合等概念,以及异常处理这个令人头疼的问题。
  • 第 6 章将讨论 Java 8 引入的颇具争议性的 Optional 类。这一章的范例将介绍 Optional 类的用法,以及如何创建实例并从中提取值。此外,我们将进一步讨论 Optional 类中 mapflatMap 操作所体现的函数式概念,以及它们与流中的 mapflatMap 操作有何不同。
  • 第 7 章将介绍输入 / 输出流(与函数式流相对)的实际应用,以及 Java 8 针对文件和目录处理为标准库引入的一些函数式概念。
  • 第 8 章将讨论 Java 8 引入的 Date-Time API,以及它如何取代传统且饱受诟病的 Date 类和 Calendar 类。这种新的 API 基于 Joda-Time 库,凝聚了大量开发人员多年的使用经验,已被重写为 java.time 包。坦率地讲,即便 Date-Time API 是 Java 8 新增的唯一特性,升级到 Java 8 也物有所值。
  • 第 9 章主要介绍流模型的一种隐式承诺:通过一次方法调用,可以将串行流转换为并行流,从而充分利用计算机中所有可用的处理器。并发涉及的内容很多,这一章将重点介绍 Java 库的新增功能,这些功能便于用户进行试验,并评估成本和收益是否值得付出努力。
  • 第 10 章将介绍 Java 9 引入的众多新特性,该版本于 2017 年 9 月 21 日正式发布。Jigsaw 本身的内容已可单独成书,但其基础概念十分清晰,这一章将对此进行介绍。其他范例将讨论接口中的私有方法,并介绍 StreamCollectorsOptional 新增的各种方法,以及如何创建日期流 1。
  • 附录 A 将介绍 Java 中的泛型。泛型是 Java 1.5 引入的概念,但大部分开发人员对泛型只是略知皮毛,仅停留在完成工作所需的层面上。不过浏览 Java 8 和 Java 9 的 Javadoc 就会知道,这种日子已一去不复返。附录 A 旨在介绍如何阅读并解释 API,以帮助读者理解较为复杂的方法签名。

1是的,我也希望能将讨论 Java 9 的章节排在第 9 章,不过仅仅为了偶然的对称性而对章节进行重新编排似乎不太合适。有这个脚注也就够了。

读者不必以任何特定的顺序阅读各章及其范例。各章之间互为补充,而且每个范例最后都包括指向其他范例的参考信息,所以从任何地方开始阅读均无不妥。章节分组是为了将相近的范例归类,但读者完全可以根据需要阅读所需的范例,以解决当前遇到的任何问题。