前言
多年以来,函数式编程被认为是少数人的游戏,这些人总是强调自己在智力上的优越性,认为函数式编程的智慧不适合推广给普罗大众。写作此书的目的就是为了挑战这种思想,函数式编程并没有多么了不起,也绝不是少数人的游戏。
在过去的两年中,我请伦敦Java社区的开发人员以各种方式测试Java8的新特性。我发现很多人都喜欢Java 8的新用法和类库。他们有可能被一些术语和高大上的概念吓到,但是稍稍一丁点儿函数式编程技巧都能给编程带来便利,他们对此喜不自胜。人们津津乐道的话题之一是使用新的StreamAPI操作对象和集合类时(比如从所有的唱片列表中过滤出在英国本地出品的唱片时),代码是多么易读。
组织这些Java社区活动,让我认识到了示例代码的重要性。人们通过不断地阅读和消化这些简单的示例,最终归纳出某种模式。我还意识到术语是多么令人讨厌,因此,在介绍一个晦涩的概念时,我都会给出通俗易懂的解释。对很多人来说,Java 8提供的函数式编程元素有限:没有单子',没有语言层面的惰性求值,也没有为不可变性提供额外支持。对实用至上的程序员来说,这没什么大不了的,我们只想在类库级别抽象,写出简单干净的代码来解决业务问题。如果有人为我们写出这样的类库,那再好不过了,这样我们]就可以把主要精力放在日常工作上了。
本人免费整理了Java高级资料,涵盖了Java、Redis、MongoDB、MySQL、Zookeeper、Spring Cloud、Dubbo高并发分布式等教程,一共30G,需要自己领取。
传送门:https://mp.weixin.qq.com/s/osB-BOl6W-ZLTSttTkqMPQ。
为什么要阅读本书
本书将探讨如下主题。
●如何编写出简单、干净、易读的代码一 尤其是对于集合的操作?
●如何简单地使用并行计算提高性能?
●如何准确地为问题建模,并且开发出更好的领域特定语言?
●如何写出不易出错,并且更简单的并发代码?
●如何测试和调试Lambda表达式?
将Lambda表达式加入Java,并不只是为了提高开发人员的生产效率,业界也对这一特性有根本性的需求。
本书读者对象
本书面向那些已经掌握JavaSE,并且想尽快了解Java8新特性的开发人员。
如果你对Lambda表达式感兴趣,想知道它怎么帮助你提升专业技能,那么这本书就是为你而写的。我假设读者还不知道Lambda表达式,以及Java 8中核心类库的变化,我将从零开始介绍这些概念、类库和技术。
虽然我想让所有开发人员都来买这本书,但这不现实,这不是一-本适合所有人的书。如果你一点儿也不懂Java,那么这本书就不适合你。同时,尽管本书会详细讲解Java中的Lambda表达式,但是我不会解释怎样在其他语言中使用Lambda表达式。
我也不会讲解Java SE中一些基本的概念,比如集合类、匿名内部类或者Swing中的事件处理机制。我假设读者已经掌握了这些知识。
怎样阅读本书
本书采用了示例驱动的写作风格:介绍完一个概念之后, 就会紧跟一段代码。代码中的一些片段,有时你可能无法全部看懂。没关系,通常在代码后面会紧跟一段 文字,讲解代码的细节。
这种方式能让你边学边练,多数章节还在最后提供了练习题,供读者自行练习。我强烈建议读者读完一章后完成这些练习,熟能生巧。每个务实的程序员都知道,自欺欺人很容易,你觉得读懂一段代码了 ,其实还是遗漏了一些细节。
使用Lambda表达式,就是将复杂性抽象到类库的过程。在本书中,我会引入很多常用类库的细节。第2章至第6章介绍了JDK8中核心语言的变化以及升级后的类库。
最后三章介绍了如何在真实环境下使用函数式编程。第7章介绍一些让测试和调试Lambda表达式变得容易的技巧;第8章解释现有的那些良好的软件设计原则如何应用到Lambda表达式上;第9章讨论并发,怎样使用Lambda表达式写出易读且易于维护的并发代码。涉及第三方类库时,这些章节也会加以介绍。读者可以将前四章当作Java8的入门指南一要用好Java8,每个人都必须学会这些知识。
后面的几章难度略高,但掌握了这几章的内容,你就可以成为知识更加全面的程序员,在自己的设计中得心应手地使用Lambda表达式。你在不断学习的过程中,也会接触大量的练习,答案可以在GitHub (ttps:/github.com/RichardWarburton/java-8-Lambdas -exercises)上找到。如果你能边学边练,就能迅速掌握Lambda表达式。
目录
第 1 章 简介:在开始探索Lambda表达式之前,首先我们要知道它因何而生。本章将介绍Lambda表达式产生的原因,以及本书的写作动机和组织结构。
1.1.png
第 2 章 Lambda表达式:Java 8的最大变化是引入了Lambda表达式一一种 紧凑的、传递行为的方式。它也是本.书后续章节所述内容的基础,因此,接下来就了解-一下什么是Lambda表达式。
2.png
2.1.png
第 3 章 流:Java8中新增的特性旨在帮助程序员写出更好的代码,其中对核心类库的改进是很关键的
一部分,也是本章的主要内容。对核心类库的改进主要包括集合类的API和新引入的流(Stream)。流使程序员得以站在更高的抽象层次上对集合进行操作。本章会介绍Strean类中的一组方法, 每个方法都对应集合上的一种操作。
3.png
3.1.png
第 4 章 类库:本章还对前3章疏漏的知识点进行补充,比如,Lambda表达式方法重载的工作原理、基本类型的使用方法等。使用Lambda表达式编写程序时,掌握这些知识非常重要。
4.png
4.1.png
第 5 章 高级集合类和收集器:第3章只介绍了集合类的部分变化,事实上,Java8对集合类的改进不止这些。现在是时
候介绍一些高级主题了,包括新引入的Collector类。同时我还会为大家介绍方法引用,它可以帮助大家在Lambda表达式中轻松使用已有代码。编写大量使用集合类的代码时,使用方法引用能让程序员获得丰厚的回报。本章还会涉及集合类的一一些更高级的主题,比如流中元素的顺序,以及一些有用的API。
5.png
5.1.png
第 6 章 数据并行化:本章主要内容并不在于如何更改代码,而是讲述为什么需要并行化和什么时候会带来性能的提升。要提醒大家的是,本章并不是关于 Java 性能的泛泛之谈,我们只关注 Java 8 轻松提升性能的技术。
6.png
6.1.png
第 7 章 测试、调试和重构:本章主要探讨如何在代码中使用 Lambda 表达式的技术,也会说明什么情况下不应该(直
接)使用 Lambda 表达式。本章还讲述了如何调试大量使用 Lambda 表达式和流的程序。
7.png
7.1.png
第 8 章 设计和架构的原则:本章将探索如何使用 Lambda 表达式实现 SOLID 原则,该原则是开发良好面向对象程序的
准则。使用 Lambda 表达式,还能改进一些现有的设计模式,本章也会为大家简要介绍几个这样的例子。
8.png
8.1.png
第 9 章 使用Lambda表达式编写并发程序:本 章 的 一 些 例 子 用 到 了 Vert.x(http://vertx.io/) 和RxJava(https://github.com/Netflix/RxJava)框架,但其中展现的设计原则是通用的,对其他框架或是自己编写的、没有使用
任何框架的程序也适用。
9.png
9.1.png
第 10 章 下一步该怎么办:这里给出一些开放性的练习,没有标准答案,理解这些问题能够指导读者接下来的学习过程。
10.png
10.1.png
网友评论