图书介绍

Java函数式编程PDF|Epub|txt|kindle电子书版本网盘下载

Java函数式编程
  • (法)Pierre-Yves Saumont著;高清华译 著
  • 出版社: 北京:电子工业出版社
  • ISBN:7121330210
  • 出版时间:2018
  • 标注页数:490页
  • 文件大小:49MB
  • 文件页数:517页
  • 主题词:JAVA语言-程序设计

PDF下载


点此进入-本书在线PDF格式电子书下载【推荐-云解压-方便快捷】直接下载PDF格式图书。移动端-PC端通用
种子下载[BT下载速度快]温馨提示:(请使用BT下载软件FDM进行下载)软件下载地址页直链下载[便捷但速度慢]  [在线试读本书]   [在线获取解压码]

下载说明

Java函数式编程PDF格式电子书版下载

下载的文件为RAR压缩包。需要使用解压软件进行解压得到PDF格式图书。

建议使用BT下载工具Free Download Manager进行下载,简称FDM(免费,没有广告,支持多平台)。本站资源全部打包为BT种子。所以需要使用专业的BT下载软件进行下载。如BitComet qBittorrent uTorrent等BT下载工具。迅雷目前由于本站不是热门资源。不推荐使用!后期资源热门了。安装了迅雷也可以迅雷进行下载!

(文件页数 要大于 标注页数,上中下等多册电子书除外)

注意:本站所有压缩包均有解压码: 点击下载压缩包解压工具

图书目录

第1章 什么是函数式编程1

1.1 函数式编程是什么2

1.2 编写没有副作用的程序4

1.3 引用透明如何让程序更安全6

1.4 函数式编程的优势7

1.5 用代换模型来推断程序8

1.6 将函数式原则应用于一个简单的例子9

1.7 抽象到极致15

1.8 总结16

第2章 在Java中使用函数17

2.1 什么是函数18

2.1.1 现实世界里的函数18

2.2 Java中的函数24

2.2.1 函数式的方法24

2.2.2 Java的函数式接口与匿名类30

2.2.3 复合函数31

2.2.4 多态函数32

2.2.5 通过lambda简化代码33

2.3 高级函数特性36

2.3.1 多参函数怎么样36

2.3.2 应用柯里化函数37

2.3.3 高阶函数38

2.3.4 多态高阶函数39

2.3.5 使用匿名函数43

2.3.6 局部函数45

2.3.7 闭包46

2.3.8 部分函数应用和自动柯里化48

2.3.9 交换部分应用函数的参数53

2.3.10 递归函数54

2.3.11 恒等函数56

2.4 Java 8的函数式接口58

2.5 调试lambda59

2.6 总结62

第3章 让Java更加函数式63

3.1 使标准控制结构具有函数式风格64

3.2 抽象控制结构65

3.2.1 清理代码69

3.2.2 if…else的另一种方式73

3.3 抽象迭代78

3.3.1 使用映射抽象列表操作79

3.3.2 创建列表80

3.3.3 使用head和tail操作81

3.3.4 函数式地添加列表元素83

3.3.5 化简和折叠列表83

3.3.6 复合映射和映射复合90

3.3.7 对列表应用作用91

3.3.8 处理函数式的输出92

3.3.9 构建反递归列表93

3.4 使用正确的类型97

3.4.1 标准类型的问题97

3.4.2 定义值类型99

3.4.3 值类型的未来103

3.5 总结103

第4章 递归、反递归和记忆化104

4.1 理解反递归和递归105

4.1.1 探讨反递归和递归的加法例子105

4.1.2 在Java中实现递归106

4.1.3 使用尾调用消除107

4.1.4 使用尾递归方法和函数107

4.1.5 抽象递归108

4.1.6 为基于栈的递归方法使用一个直接替代品112

4.2 使用递归函数115

4.2.1 使用局部定义的函数115

4.2.2 使函数成为尾递归116

4.2.3 双递归函数:斐波那契数列示例117

4.2.4 让列表的方法变成栈安全的递归120

4.3 复合大量函数123

4.4 使用记忆化127

4.4.1 命令式编程中的记忆化127

4.4.2 递归函数的记忆化128

4.4.3 自动记忆化130

4.5 总结136

第5章 用列表处理数据138

5.1 如何对数据集合进行分类138

5.1.1 不同的列表类型139

5.1.2 对列表性能的相对期望140

5.1.3 时间与空间,时间与复杂度的取舍141

5.1.4 直接修改142

5.1.5 持久化数据结构143

5.2 一个不可变、持久化的单链表实现144

5.3 在列表操作中共享数据148

5.3.1 更多列表操作150

5.4 使用高阶函数递归折叠列表155

5.4.1 基于堆的foldRight递归版162

5.4.2 映射和过滤列表164

5.5 总结167

第6章 处理可选数据168

6.1 空指针的问题169

6.2 空引用的替代方案171

6.3 Option数据类型174

6.3.1 从Option中取值176

6.3.2 将函数应用于可选值178

6.3.3 复合Option处理179

6.3.4 Option的用例181

6.3.5 复合Option的其他方法186

6.3.6 复合Option和List189

6.4 Option的其他实用程序191

6.4.1 检查是Some还是None191

6.4.2 equals和hashcode192

6.5 如何及何时使用Option193

6.6 总结195

第7章 处理错误和异常197

7.1 待解决的问题197

7.2 Either类型199

7.2.1 复合Either200

7.3 Result类型203

7.3.1 为Result类添加方法204

7.4 Result模式206

7.5 Result处理进阶213

7.5.1 应用断言214

7.5.2 映射Failure215

7.5.3 增加工厂方法218

7.5.4 应用作用220

7.5.5 Result复合进阶222

7.6 总结226

第8章 列表处理进阶228

8.1 length的问题229

8.1.1 性能问题229

8.1.2 记忆化的优点230

8.1.3 记忆化的缺点230

8.1.4 实际性能232

8.2 复合List和Result233

8.2.1 List中返回Result的方法233

8.2.2 将List〈Result〉转换为Result〈List〉235

8.3 抽象常见列表用例238

8.3.1 压缩和解压缩列表238

8.3.2 通过索引访问元素241

8.3.3 拆分列表244

8.3.4 搜索子列表248

8.3.5 使用列表的其他函数249

8.4 自动并行处理列表254

8.4.1 并非所有的计算都可以并行化254

8.4.2 将列表拆分为子列表254

8.4.3 并行处理子列表256

8.5 总结258

第9章 使用惰性259

9.1 理解严格和惰性259

9.1.1 Java是一门严格的语言260

9.1.2 严格带来的问题261

9.2 实现惰性263

9.3 只有惰性才能做到的事264

9.4 为何不要用Java 8中的Stream265

9.5 创建一个惰性列表数据结构266

9.5.1 记忆已计算的值268

9.5.2 对流的操作271

9.6 惰性的真正本质274

9.6.1 折叠流277

9.7 处理无限流282

9.8 避免null引用和可变字段285

9.9 总结287

第10章 用树进行更多数据处理289

10.1 二叉树290

10.1.1 平衡树和非平衡树291

10.1.2 大小、高度和深度291

10.1.3 叶树292

10.1.4 有序二叉树或二叉搜索树292

10.1.5 插入顺序293

10.1.6 树的遍历顺序294

10.2 实现二叉搜索树297

10.3 从树中删除元素303

10.4 合并任意树304

10.5 折叠树310

10.5.1 用两个函数折叠311

10.5.2 用一个函数折叠313

10.5.3 选择哪种折叠的实现314

10.6 映射树316

10.7 平衡树317

10.7.1 旋转树317

10.7.2 使用DSW算法平衡树320

10.7.3 自动平衡树322

10.7.4 解决正确的问题323

10.8 总结324

第11章 用高级树来解决真实问题325

11.1 性能更好且栈安全的自平衡树326

11.1.1 树的基本结构326

11.1.2 往红黑树中插入元素331

11.2 红黑树的用例:map337

11.2.1 实现map337

11.2.2 扩展map340

11.2.3 使用键不可比较的map341

11.3 实现函数式优先队列344

11.3.1 优先队列访问协议344

11.3.2 优先队列使用案例344

11.3.3 实现需求345

11.3.4 左倾堆数据结构345

11.3.5 实现左倾堆346

11.3.6 实现像队列一样的接口351

11.4 元素不可比较的优先队列352

11.5 总结358

第12章 用函数式的方式处理状态改变359

12.1 一个函数式的随机数发生器360

12.1.1 随机数发生器接口361

12.1.2 实现随机数发生器362

12.2 处理状态的通用API366

12.2.1 使用状态操作367

12.2.2 复合状态操作368

12.2.3 递归状态操作370

12.3 通用状态处理372

12.3.1 状态模式374

12.3.2 构建一个状态机375

12.3.3 何时使用状态和状态机381

12.4 总结381

第13章 函数式输入/输出382

13.1 在上下文中应用作用383

13.1.1 作用是什么384

13.1.2 实现作用384

13.1.3 用于失败情况的更强大的作用387

13.2 读取数据390

13.2.1 从控制台读取390

13.2.2 从文件中读取395

13.2.3 检查输入396

13.3 真正的函数式输入/输出398

13.3.1 怎样才能让输入/输出是完全函数式的398

13.3.2 实现纯函数式的输入/输出399

13.3.3 合并IO400

13.3.4 用IO处理输入402

13.3.5 扩展IO类型404

13.3.6 使IO类型栈安全407

13.4 总结413

第14章 通过actor共享可变状态414

14.1 actor模型415

14.1.1 异步消息416

14.1.2 处理并行416

14.1.3 处理actor状态变化417

14.2 构建actor框架418

14.2.1 actor框架的限制418

14.2.2 设计actor框架接口418

14.2.3 AbstractActor的实现420

14.3 开始使用actor422

14.3.1 实现乒乓示例422

14.3.2 一个更严谨的例子:并行运行一个计算424

14.3.3 重新排序结果430

14.3.4 解决性能问题433

14.4 总结439

第15章 以函数式的方式解决常见问题440

15.1 使用断言来校验数据441

15.2 从文件中读取属性446

15.2.1 载入属性文件446

15.2.2 将属性读取为字符串447

15.2.3 生成更好的错误消息448

15.2.4 像列表那样读取属性451

15.2.5 读取枚举值453

15.2.6 读取任意类型的属性454

15.3 转换命令式程序:XML读取器457

15.3.1 列出必需的函数459

15.3.2 复合函数并应用作用460

15.3.3 实现函数461

15.3.4 让程序更加函数式462

15.3.5 修复参数类型问题466

15.3.6 以处理元素的函数为参数467

15.3.7 处理元素名称错误468

15.4 总结470

附录A 使Java 8的函数式特性471

附录B Monad479

附录C 敢问路在何方485

热门推荐