为你推荐
译者序
译者简介
为什么要函数式编程
序言
致谢
1 什么是函数式编程
1.1 函数式编程是什么
1.2 编写没有副作用的程序
1.3 引用透明如何让程序更安全
1.4 函数式编程的优势
1.5 用代换模型来推断程序
1.6 将函数式原则应用于一个简单的例子
1.7 抽象到极致
1.8 总结
2 在Java中使用函数
2.1 什么是函数
2.2 Java中的函数
2.3 高级函数特性
2.4 Java 8的函数式接口
2.5 调试lambda
2.6 总结
3 让Java更加函数式
3.1 使标准控制结构具有函数式风格
3.2 抽象控制结构
3.3 抽象迭代
3.4 使用正确的类型
3.5 总结
4 递归、反递归和记忆化
4.1 理解反递归和递归
4.2 使用递归函数
4.3 复合大量函数
4.4 使用记忆化
4.5 总结
5 用列表处理数据
5.1 如何对数据集合进行分类
5.2 一个不可变、持久化的单链表实现
5.3 在列表操作中共享数据
5.4 使用高阶函数递归折叠列表
5.5 总结
6 处理可选数据
6.1 空指针的问题
6.2 空引用的替代方案
6.3 Option数据类型
6.4 Option的其他实用程序
6.5 如何及何时使用Option
6.6 总结
7 处理错误和异常
7.1 待解决的问题
7.2 Either类型
7.3 Result类型
7.4 Result模式
7.5 Result处理进阶
7.6 总结
8 列表处理进阶
8.1 length的问题
8.2 复合List和Result
8.3 抽象常见列表用例
8.4 自动并行处理列表
8.5 总结
9 使用惰性
9.1 理解严格和惰性
9.2 实现惰性
9.3 只有惰性才能做到的事
9.4 为何不要用Java 8中的Stream
9.5 创建一个惰性列表数据结构
9.6 惰性的真正本质
9.7 处理无限流
9.8 避免null引用和可变字段
9.9 总结
10 用树进行更多数据处理
10.1 二叉树
10.2 实现二叉搜索树
10.3 从树中删除元素
10.4 合并任意树
10.5 折叠树
10.6 映射树
10.7 平衡树
10.8 总结
11 用高级树来解决真实问题
11.1 性能更好且栈安全的自平衡树
11.2 红黑树的用例:map
11.3 实现函数式优先队列
11.4 元素不可比较的优先队列
11.5 总结
12 用函数式的方式处理状态改变
12.1 一个函数式的随机数发生器
12.2 处理状态的通用API
12.3 通用状态处理
12.4 总结
13 函数式输入/输出
13.1 在上下文中应用作用
13.2 读取数据
13.3 真正的函数式输入/输出
13.4 总结
14 通过actor共享可变状态
14.1 actor模型
14.2 构建actor框架
14.3 开始使用actor
14.4 总结
15 以函数式的方式解决常见问题
15.1 使用断言来校验数据
15.2 从文件中读取属性
15.3 转换命令式程序:XML读取器
15.4 总结
附录A 使用Java 8的函数式特性
附录B Monad
附录C 敢问路在何方
买过这本书的人还买过
读了这本书的人还在读
同类图书排行榜