序言

多年以来,函数式编程被认为是少数人的游戏,这些人总是强调自己在智力上的优越性,认为函数式编程的智慧不适合推广给普罗大众。

写作此书的目的就是为了挑战这种思想,函数式编程并没有多么了不起,也绝不是少数人的游戏。

在过去的两年中,我请伦敦 Java 社区的开发人员以各种方式测试 Java 8 的新特性。

我发现很多人都喜欢 Java 8 的新用法和类库。

他们有可能被一些术语和高大上的概念吓到,但是稍稍一丁点儿函数式编程技巧都能给编程带来便利,他们对此喜不自胜。

人们津津乐道的话题之一是使用新的 Stream API 操作对象和集合类时(比如从所有的唱片列表中过滤出在英国本地出品的唱片时),代码是多么易读。

组织这些 Java 社区活动,让我认识到了示例代码的重要性。

人们通过不断地阅读和消化这些简单的示例,最终归纳出某种模式。

我还意识到术语是多么令人讨厌,因此,在介绍一个晦涩的概念时,我都会给出通俗易懂的解释。

对很多人来说,Java 8 提供的函数式编程元素有限:没有单子,没有语言层面的惰性求值,

也没有为不可变性提供额外支持。

对实用至上的程序员来说,这没什么大不了的,我们只想在类库级别抽象,写出简单干净的代码来解决业务问题。

如果有人为我们写出这样的类库,那再好不过了,这样我们就可以把主要精力放在日常工作上了。

为什么要阅读本书

本书将探讨如下主题。

  • 如何编写出简单、干净、易读的代码——尤其是对于集合的操作?

  • 如何简单地使用并行计算提高性能?

  • 如何准确地为问题建模,并且开发出更好的领域特定语言?

  • 如何写出不易出错,并且更简单的并发代码?

  • 如何测试和调试 Lambda 表达式?

将 Lambda 表达式加入 Java,并不只是为了提高开发人员的生产效率,业界也对这一特性有根本性的需求。

本书读者对象

本书面向那些已经掌握 Java SE,并且想尽快了解 Java 8 新特性的开发人员。

如果你对 Lambda 表达式感兴趣,想知道它怎么帮助你提升专业技能,那么这本书就是为你而写的。

我假设读者还不知道 Lambda 表达式,以及 Java 8 中核心类库的变化,我将从零开始介绍这些概念、类库和技术。

虽然我想让所有开发人员都来买这本书,但这不现实,这不是一本适合所有人的书。如果你一点儿也不懂 Java,那么这本书就不适合你。

同时,尽管本书会详细讲解 Java 中的Lambda 表达式,但是我不会解释怎样在其他语言中使用 Lambda 表达式。

我也不会讲解 Java SE 中一些基本的概念,比如集合类、匿名内部类或者 Swing 中的事件处理机制。

我假设读者已经掌握了这些知识。

怎样阅读本书

本书采用了示例驱动的写作风格:介绍完一个概念之后,就会紧跟一段代码。

代码中的一些片段,有时你可能无法全部看懂。

没关系,通常在代码后面会紧跟一段文字,讲解代码的细节。

这种方式能让你边学边练,多数章节还在最后提供了练习题,供读者自行练习。

我强烈建议读者读完一章后完成这些练习,熟能生巧。

每个务实的程序员都知道,自欺欺人很容易,你觉得读懂一段代码了,其实还是遗漏了一些细节。

使用 Lambda 表达式,就是将复杂性抽象到类库的过程。

在本书中,我会引入很多常用类库的细节。

第 2 章至第 6 章介绍了 JDK 8 中核心语言的变化以及升级后的类库。最后三章介绍了如何在真实环境下使用函数式编程。

第 7 章介绍一些让测试和调试Lambda 表达式变得容易的技巧;

第 8 章解释现有的那些良好的软件设计原则如何应用到Lambda 表达式上;

第 9 章讨论并发,怎样使用 Lambda 表达式写出易读且易于维护的并发代码。

涉及第三方类库时,这些章节也会加以介绍。

读者可以将前四章当作 Java 8 的入门指南——要用好 Java 8,每个人都必须学会这些知识。

后面的几章难度略高,但掌握了这几章的内容,你就可以成为知识更加全面的程序员,在自己的设计中得心应手地使用 Lambda 表达式。

你在不断学习的过程中,也会接触大量的练习,答案可以在 GitHub(https://github.com/RichardWarburton/java-8-Lambdas-exercises) 上找到。

如果你能边学边练,就能迅速掌握 Lambda 表达式。

使用代码示例

可以在这里下载本书随附的资料(代码示例、练习题等):https://github.com/RichardWarburton/java-8-lambdas-exercises。

参考资料

《java8 函数式编程》