本书结构
本书分为六个部分,分别是:“基础知识”“使用流进行函数式数据处理”“使用流和Lambda进行高效编程”“无所不在的Java”“提升Java的并发性”和“函数式编程以及Java未来的演进”。我们强烈建议你按顺序阅读前两部分的内容,因为很多概念都需要前面的章节作为基础,后面四个部分的内容你可以按照任意顺序阅读。大多数章节都附有几个测验,可以帮助你学习和掌握这些内容。
第一部分旨在帮助你初步使用Java 8。学完这一部分,你将会对Lambda表达式有充分的了解,并可以编写简洁而灵活的代码,能够轻松适应不断变化的需求。
- 第1章总结Java的主要变化(Lambda表达式、方法引用、流和默认方法),为学习后面的内容做准备。
- 第2章介绍行为参数化,这是Java 8非常依赖的一种软件开发模式,也是引入Lambda表达式的主要原因。
- 第3章对Lambda表达式和方法引用进行全面介绍,每一步都提供了代码示例和测验。
第二部分详细讨论新的Stream API。通过Stream API,你将能够写出功能强大的代码,以声明性方式处理数据。学完这一部分,你将充分理解流是什么,以及如何在Java应用程序中使用它们来简洁而高效地处理数据集。
- 第4章介绍流的概念,并解释它们与集合有何异同。
- 第5章详细讨论为了表达复杂的数据处理查询可以使用的流操作。其间会谈到很多模式,如筛选、切片、查找、匹配、映射和归约。
- 第6章介绍收集器——Stream API的一个功能,可以让你表达更为复杂的数据处理查询。
- 第7章探讨流如何得以自动并行执行,并利用多核架构的优势。此外,你还会学到为正确而高效地使用并行流,要避免的若干陷阱。
第三部分探索Java 8和Java 9的多个主题,这些主题中的技巧能让你的Java代码更高效,并能帮助你利用现代的编程习语改进代码库。这一部分的出发点是介绍高级编程思想,本书后续内容并不依赖于此。
- 第8章是这一版新增的,探讨Java 8和Java 9对Collection API的增强。内容涵盖如何使用集合工厂,如何使用新的惯用模式处理
List和Set,以及使用Map的惯用模式。 - 第9章探讨如何利用Java 8的新功能和一些秘诀来改善你现有的代码。此外,该章还探讨了一些重要的软件开发技术,如设计模式、重构、测试和调试。
- 第10章也是这一版新增的,介绍依据领域特定语言(domain-specific language,DSL)实现API的思想。这不仅是一种强大的API设计方法,而且正变得越来越流行。Java中已经有API采用这种模式实现,譬如
Comparator、Stream以及Collector接口。
第四部分介绍Java 8和Java 9中新增的多个特性,这些特性能帮助程序员事半功倍地编写代码,让程序更加稳定可靠。我们首先从Java 8新增的两个API入手。
- 第11章介绍
java.util.Optional类,它能让你设计出更好的API,并减少空指针异常。 - 第12章探讨新的日期和时间API,这相对于以前涉及日期和时间时容易出错的API是一大改进。
- 第13章讨论默认方法是什么,如何利用它们来以兼容的方式演变API,一些实际的应用模式,以及有效使用默认方法的规则。
- 第14章是这一版新增的,探讨Java的模块系统——它是Java 9的主要改进,使大型系统能够以文档化和可执行的方式进行模块化,而不是简单地将一堆包杂乱无章地堆在一起。
第五部分探讨如何使用Java的高级特性构建并发程序——注意,我们要讨论的不是第6章和第7章中介绍的流的并发处理。
- 第15章是这一版新增的,从宏观的角度介绍异步API的思想,包括
Future、反应式编程背后的“发布–订阅”协议(封装在Java 9的Flow API中)。 - 第16章探讨
CompletableFuture,它可以让你用声明性方式表达复杂的异步计算,从而让Stream API的设计并行化。 - 第17章也是这一版新增的,详细介绍Java 9的Flow API,并提供反应式编程的实战代码解析。
第六部分是本书最后一部分,我们会谈谈怎么用Java编写高效的函数式程序,还会将Java的功能和Scala做比较。
- 第18章是一个完整的函数式编程教程,会介绍一些术语,并解释如何在Java 8中编写函数式风格的程序。
- 第19章涵盖更高级的函数式编程技巧,包括高阶函数、柯里化、持久化数据结构、延迟列表和模式匹配。这一章既提供了可以用在代码库中的实际技术,也提供了能让你成为更渊博的程序员的学术知识。
- 第20章将对比Java与Scala的功能。Scala和Java一样,是一种在JVM上实现的语言,近年来发展迅速,在编程语言生态系统中已经威胁到了Java的一些方面。
- 第21章会回顾这段学习Java 8并慢慢走向函数式编程的历程。此外,我们还会猜测,在Java 8、9以及10中添加的小功能之后,未来可能会有哪些增强和新功能出现。
最后,本书有四个附录,涵盖了与Java 8相关的其他一些话题。附录A总结了本书未讨论的一些Java 8的小特性。附录B概述了Java库的其他主要扩展,可能对你有用。附录C是第二部分的延续,介绍了流的高级用法。附录D探讨了Java编译器在幕后是如何实现Lambda表达式的。
