《Java 8函数式编程》学习笔记
Java 8 Lambdas,Richard Warburton 著(O’Reilly,2014)。版权所有, 978-1-449-37077-0。GitHub 地址
本书将探讨如下主题
- 如何编写出简单、干净、易读的代码——尤其是对于集合的操作?
- 如何简单地使用并行计算提高性能?
- 如何准确地为问题建模,并且开发出更好的领域特定语言?
- 如何写出不易出错,并且更简单的并发代码?
- 如何测试和调试 Lambda 表达式?
使用 Lambda 表达式,就是将复杂性抽象到类库的过程。
- Lambda 表达式的目的:为了编写处理批量数据的并行类库。
- 面向对象编程是对数据进行抽象,而函数式编程是对行为进行抽象。
- 函数式编程核心:在思考问题时,使用不可变值和函数,函数对一个值进行处理,映射成另一个值。
- 为什么需要再次修改 Java
- 什么是函数式编程
- 第一个 Lambda 表达式
- 如何辨别 Lambda 表达式
- 引用值,而不是变量
- 函数接口
- 类型推断
三、流
- 从外部迭代到内部迭代
- 实现机制
- 常用的流操作
3.1 collect(toList())
3.2 map
3.3 filter
3.4 flatMap
3.5 max 和 min
3.6 通用模式
3.7 reduce
3.8 整合操作 - 重构遗留代码
- 多次调用流操作
- 高阶函数
- 正确使用 Lambda 表达式
- 要点回顾
- 练习
四、类库
- 方法引用
- 元素顺序
- 使用收集器
3.1 转换成其他集合
3.2 转换成值
3.3 数据分块
3.4 数据分组
3.5 字符串
3.6 组合收集器
3.7 重构和定制收集器
3.8 对收集器的归一化处理 - 一些细节
- 要点回顾
- 练习
六、数据并行化
七、测试、调试和重构
- 重构候选项
1.1 进进出出、摇摇晃晃
1.2 孤独的覆盖
1.3 同样的东西写两遍 - Lambda 表达式的单元测试
- 在测试替身时使用Lambda表达式
- 惰性求值和调试
- 日志和打印消息
- 解决方案: peek
- 在流中间设置断点
- 要点回顾
八、设计和架构的原则
- Lambda 表达式改变了设计模式
1.1 命令者模式
1.2 策略模式
1.3 观察者模式
1.4 模板方法模式 - 使用 Lambda 表达式的领域专用语言
2.1 使用 Java 编写DSL
2.2 实现
2.3 评估 - 使用 Lambda 表达式的 SOLID 原则
3.1 单一功能原则
3.2 开闭原则
3.3 依赖反转原则 - 进阶阅读
- 要点回顾