Java 8函数式编程[Java 8 Lambdas:Functional Programming for the Masses]pdf

图书网 2018年12月20日21:06:04
评论
2.7K
摘要

对于有经验的Java程序员来说,全面了解Java 8引入的Lambda表达式是当务之急。本书作者是资深Java开发者、英国伦敦Java社区负责人,英文原版深受好评,被誉为学习Lambda表达式的必读佳作。这本书言简意赅,示例精到,全面介绍了因为Lambda表达式的引入,Java这门世界上流行的语言都发生了哪些重大变化,以及匿名函数将如何重塑Java的编程范式。全书篇幅不长,环环相扣,读来令人手不释卷。
函数式编程的确能大幅提升编程效率,但它也并不高深,绝非少数人的游戏。本书可以让所有Java程序员平滑过渡到Java 8时代。前半部分展示了如何正确使用Lambda表达式;后面几章介绍如何利用Lambda表达式提高并发操作的性能、编写出更简单的并发代码。全书采用了示例驱动的写作风格:每介绍完一个概念,紧接着给出一段示例代码,并辅以详尽的讲解。多数章节还在最后提供了练习题,供读者自行练习。

Java 8函数式编程[Java 8 Lambdas:Functional Programming for the Masses] 内容简介

通过每一章的练习快速掌握Java8中的Lambda表达式分析流、高级集合和其他Java8类库的改进利用多核CPU提高数据并发的性能将现有代码库和库代码Lambda化学习Lambda表达式单元测试和调试的实践解决方案用Lambda表达式实现面向对象编程的SOLID原则编写能有效执行消息传送和非阻塞I/O的并发应用。

Java 8函数式编程[Java 8 Lambdas:Functional Programming for the Masses] 目录

前言

第1章 简介

1.1 为什么需要再次修改Java

1.2 什么是函数式编程

1.3 示例

第2章 Lambda 表达式

2.1 第一个Lambda 表达式

2.2 如何辨别Lambda 表达式

2.3 引用值,而不是变量

2.4 函数接口

2.5 类型推断

2.6 要点回顾

2.7 练习

第3章 流

3.1 从外部迭代到内部迭代

3.2 实现机制

3.3 常用的流操作

3.3.1 collect(toList())

3.3.2 map

3.3.3 filter

3.3.4 flatMap

3.3.5 max 和min

3.3.6 通用模式

3.3.7 reduce

3.3.8 整合操作

3.4 重构遗留代码

3.5 多次调用流操作

3.6 高阶函数

3.7 正确使用Lambda 表达式

3.8 要点回顾

3.9 练习

3.10 进阶练习

第4章 类库

4.1 在代码中使用Lambda 表达式

4.2 基本类型

4.3 重载解析

4.4 @FunctionalInterface

4.5 二进制接口的兼容性

4.6 默认方法

4.7 多重继承

4.8 权衡

4.9 接口的静态方法

4.10 Optional

4.11 要点回顾

4.12 练习

4.13 开放练习

第5章 高级集合类和收集器

5.1 方法引用

5.2 元素顺序

5.3 使用收集器

5.3.1 转换成其他集合

5.3.2 转换成值

5.3.3 数据分块

5.3.4 数据分组

5.3.5 字符串

5.3.6 组合收集器

5.3.7 重构和定制收集器

5.3.8 对收集器的归一化处理

5.4 一些细节

5.5 要点回顾

5.6 练习

第6章 数据并行化

6.1 并行和并发

6.2 为什么并行化如此重要

6.3 并行化流操作

6.4 模拟系统

6.5 限制

6.6 性能

6.7 并行化数组操作

6.8 要点回顾

6.9 练习

第7章 测试、调试和重构

7.1 重构候选项

7.1.1 进进出出、摇摇晃晃

7.1.2 孤独的覆盖

7.1.3 同样的东西写两遍

7.2 Lambda 表达式的单元测试

7.3 在测试替身时使用Lambda 表达式

7.4 惰性求值和调试

7.5 日志和打印消息

7.6 解决方案:peak

7.7 在流中间设置断点

7.8 要点回顾

第8章 设计和架构的原则

8.1 Lambda 表达式改变了设计模式

8.1.1 命令者模式

8.1.2 策略模式

8.1.3 观察者模式

8.1.4 模板方法模式

8.2 使用Lambda 表达式的领域专用语言

8.2.1 使用Java 编写DSL

8.2.2 实现

8.2.3 评估

8.3 使用Lambda 表达式的SOLID 原则

8.3.1 单一功能原则

8.3.2 开闭原则

8.3.3 依赖反转原则

8.4 进阶阅读

8.5 要点回顾

第9章 使用Lambda 表达式编写并发程序

9.1 为什么要使用非阻塞式I/O

9.2 回调

9.3 消息传递架构

9.4 末日金字塔

9.5 Future

9.6 CompletableFuture

9.7 响应式编程

9.8 何时何地使用新技术

9.9 要点回顾

9.10 练习

第10章 下一步该怎么办

封面介绍

Java 8函数式编程[Java 8 Lambdas:Functional Programming for the Masses] 精彩文摘

在开始探索Lambda表达式之前,首先我们要知道它因何而生。本章将介绍Lambda表达式产生的原因,以及本书的写作动机和组织结构。

1.1 为什么需要再次修改Java

1996年1月,Java 1.0发布,此后计算机编程领域发生了翻天覆地的变化。商业发展需要更复杂的应用,大多数程序都跑在功能强大的多核CPU的机器上。带有高效运行时编译器的Java虚拟机(JVM)的出现,使程序员将更多精力放在编写干净、易于维护的代码上,而不是思考如何将每一个CPU时钟周期、每字节内存物尽其用。

多核CPU的兴起成为了不容回避的事实。涉及锁的编程算法不但容易出错,而且耗费时间。人们开发了java.util.concurrent包和很多第三方类库,试图将并发抽象化,帮助程序员写出在多核CPU上运行良好的程序。很可惜,到目前为止,我们的成果还远远不够。

开发类库的程序员使用Java时,发现抽象级别还不够。处理大型数据集合就是个很好的例子,面对大型数据集合,Java还欠缺高效的并行操作。开发者能够使用Java 8编写复杂的集合处理算法,只需要简单修改一个方法,就能让代码在多核CPU上高效运行。为了编写这类处理批量数据的并行类库,需要在语言层面上修改现有的Java:增加Lambda表达式。

当然,这样做是有代价的,程序员必须学习如何编写和阅读使用Lambda表达式的代码,但是,这不是一桩赔本的买卖。与手写一大段复杂、线程安全的代码相比,学习一点新语法和一些新习惯容易很多。开发企业级应用时,好的类库和框架极大地降低了开发时间和成本,也为开发易用且高效的类库扫清了障碍。

对于习惯了面向对象编程的开发者来说,抽象的概念并不陌生。面向对象编程是对数据进行抽象,而函数式编程是对行为进行抽象。现实世界中,数据和行为并存,程序也是如此,因此这两种编程方式我们都得学。

这种新的抽象方式还有其他好处。不是所有人都在编写性能优先的代码,对于这些人来说,函数式编程带来的好处尤为明显。程序员能编写出更容易阅读的代码——这种代码更多地表达了业务逻辑的意图,而不是它的实现机制。易读的代码也易于维护、更可靠、更不容易出错。

在写回调函数和事件处理程序时,程序员不必再纠缠于匿名内部类的冗繁和可读性,函数式编程让事件处理系统变得更加简单。能将函数方便地传递也让编写惰性代码变得容易,惰性代码在真正需要时才初始化变量的值。

Java 8还让集合类可以拥有一些额外的方法:default方法。程序员在维护自己的类库时,可以使用这些方法。

总而言之,Java已经不是祖辈们当年使用的Java了,嗯, 这不是件坏事。

1.2 什么是函数式编程

每个人对函数式编程的理解不尽相同。但其核心是:在思考问题时,使用不可变值和函数,函数对一个值进行处理,映射成另一个值。

不同的语言社区往往对各自语言中的特性孤芳自赏。现在谈Java程序员如何定义函数式编程还为时尚早,但是,这根本不重要!我们关心的是如何写出好代码,而不是符合函数式编程风格的代码。

本书将重点放在函数式编程的实用性上,包括可以被大多数程序员理解和使用的技术,帮助他们写出易读、易维护的代码。

图书网:Java 8函数式编程[Java 8 Lambdas:Functional Programming for the Masses]pdf

继续阅读

→→→→→→→→→→→→→→→→→→→→查找获取

程序设计

重构 改善既有代码的设计(中文版)pdf

《重构:改善既有代码的设计》(中文版)所提的这些重构准则将帮助你一次一小步地修改你的代码,这就减少了过程中的风险。很快你就会把这些重构准则和其名称加入自己的开发词典中,并且朗朗上口...
程序设计

数据结构 C语言版 第2版pdf

适读人群 :普通高校电子信息大类本科生学习、考研,同时也适合零售和培训。 采用“案例驱动”的编写模式。书中结合实际应用,将各章按照“案例引入——数据结构及其操作——案例分析与实现”...
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: