Java函数式编程

Java函数式编程

查阅电子书
手机扫码
  • 微信扫一扫

    关注微信公众号

因版权原因待上架

编辑推荐

这并不是一本关于Java的书,而是一本关于函数式编程的书。

内容简介

本书通过例子、练习和图表,学习函数式编程的基本原则。

作者由浅入深地介绍了函数式编程的思维方式,并引导读者通过易于掌握的例子、练习和图表来学习和巩固函数式编程的基本原则和最佳实践。读者甚至可以在阅读的同时编写出自己的函数式类库。

本书非常适合对Java有所了解的程序员,无须任何基础的数学理论或是函数式编程经验即可快速上手。

作者简介

作者Pierre-Yves Saumont,是一名拥有三十年设计和构建企业级软件的Java开发者。他目前是Alcatel-Lucent Submarine Networks公司的一名软件研发工程师。

章节目录

版权信息

内容简介

译者序

译者简介

为什么要函数式编程

序言

致谢

关于本书

第1章 什么是函数式编程

1.1 函数式编程是什么

1.2 编写没有副作用的程序

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

1.4 函数式编程的优势

1.5 用代换模型来推断程序

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

1.7 抽象到极致

1.8 总结

第2章 在Java中使用函数

2.1 什么是函数

2.1.1 现实世界里的函数

2.2 Java中的函数

2.2.1 函数式的方法

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

2.2.3 复合函数

2.2.4 多态函数

2.2.5 通过lambda简化代码

2.3 高级函数特性

2.3.1 多参函数怎么样

2.3.2 应用柯里化函数

2.3.3 高阶函数

2.3.4 多态高阶函数

2.3.5 使用匿名函数

2.3.6 局部函数

2.3.7 闭包

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

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

2.3.10 递归函数

2.3.11 恒等函数

2.4 Java 8的函数式接口

2.5 调试lambda

2.6 总结

第3章 让Java更加函数式

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

3.2 抽象控制结构

3.2.1 清理代码

3.2.2 if … else的另一种方式

3.3 抽象迭代

3.3.1 使用映射抽象列表操作

3.3.2 创建列表

3.3.3 使用head和tail操作

3.3.4 函数式地添加列表元素

3.3.5 化简和折叠列表

3.3.6 复合映射和映射复合

3.3.7 对列表应用作用

3.3.8 处理函数式的输出

3.3.9 构建反递归列表

3.4 使用正确的类型

3.4.1 标准类型的问题

3.4.2 定义值类型

3.4.3 值类型的未来

3.5 总结

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

4.1 理解反递归和递归

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

4.1.2 在Java中实现递归

4.1.3 使用尾调用消除

4.1.4 使用尾递归方法和函数

4.1.5 抽象递归

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

4.2 使用递归函数

4.2.1 使用局部定义的函数

4.2.2 使函数成为尾递归

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

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

4.3 复合大量函数

4.4 使用记忆化

4.4.1 命令式编程中的记忆化

4.4.2 递归函数的记忆化

4.4.3 自动记忆化

4.5 总结

第5章 用列表处理数据

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

5.1.1 不同的列表类型

5.1.2 对列表性能的相对期望

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

5.1.4 直接修改

5.1.5 持久化数据结构

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

5.3 在列表操作中共享数据

5.3.1 更多列表操作

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

5.4.1 基于堆的foldRight递归版

5.4.2 映射和过滤列表

5.5 总结

第6章 处理可选数据

6.1 空指针的问题

6.2 空引用的替代方案

6.3 Option数据类型

6.3.1 从Option中取值

6.3.2 将函数应用于可选值

6.3.3 复合Option处理

6.3.4 Option的用例

6.3.5 复合Option的其他方法

6.3.6 复合Option和List

6.4 Option的其他实用程序

6.4.1 检查是Some还是None

6.4.2 equals和hashcode

6.5 如何及何时使用Option

6.6 总结

第7章 处理错误和异常

7.1 待解决的问题

7.2 Either类型

7.2.1 复合Either

7.3 Result类型

7.3.1 为Result类添加方法

7.4 Result模式

7.5 Result处理进阶

7.5.1 应用断言

7.5.2 映射Failure

7.5.3 增加工厂方法

7.5.4 应用作用

7.5.5 Result复合进阶

7.6 总结

第8章 列表处理进阶

8.1 length的问题

8.1.1 性能问题

8.1.2 记忆化的优点

8.1.3 记忆化的缺点

8.1.4 实际性能

8.2 复合List和Result

8.2.1 List中返回Result的方法

8.2.2 将List转换为Result

8.3 抽象常见列表用例

8.3.1 压缩和解压缩列表

8.3.2 通过索引访问元素

8.3.3 拆分列表

8.3.4 搜索子列表

8.3.5 使用列表的其他函数

8.4 自动并行处理列表

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

8.4.2 将列表拆分为子列表

8.4.3 并行处理子列表

8.5 总结

第9章 使用惰性

9.1 理解严格和惰性

9.1.1 Java是一门严格的语言

9.1.2 严格带来的问题

9.2 实现惰性

9.3 只有惰性才能做到的事

9.4 为何不要用Java 8中的Stream

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

9.5.1 记忆已计算的值

9.5.2 对流的操作

9.6 惰性的真正本质

9.6.1 折叠流

9.7 处理无限流

9.8 避免null引用和可变字段

9.9 总结

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

10.1 二叉树

10.1.1 平衡树和非平衡树

10.1.2 大小、高度和深度

10.1.3 叶树

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

10.1.5 插入顺序

10.1.6 树的遍历顺序

10.2 实现二叉搜索树

10.3 从树中删除元素

10.4 合并任意树

10.5 折叠树

10.5.1 用两个函数折叠

10.5.2 用一个函数折叠

10.5.3 选择哪种折叠的实现

10.6 映射树

10.7 平衡树

10.7.1 旋转树

10.7.2 使用DSW算法平衡树

10.7.3 自动平衡树

10.7.4 解决正确的问题

10.8 总结

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

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

11.1.1 树的基本结构

11.1.2 往红黑树中插入元素

11.2 红黑树的用例:map

11.2.1 实现map

11.2.2 扩展map

11.2.3 使用键不可比较的map

11.3 实现函数式优先队列

11.3.1 优先队列访问协议

11.3.2 优先队列使用案例

11.3.3 实现需求

11.3.4 左倾堆数据结构

11.3.5 实现左倾堆

11.3.6 实现像队列一样的接口

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

11.5 总结

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

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

12.1.1 随机数发生器接口

12.1.2 实现随机数发生器

12.2 处理状态的通用API

12.2.1 使用状态操作

12.2.2 复合状态操作

12.2.3 递归状态操作

12.3 通用状态处理

12.3.1 状态模式

12.3.2 构建一个状态机

12.3.3 何时使用状态和状态机

12.4 总结

第13章 函数式输入/输出

13.1 在上下文中应用作用

13.1.1 作用是什么

13.1.2 实现作用

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

13.2 读取数据

13.2.1 从控制台读取

13.2.2 从文件中读取

13.2.3 检查输入

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

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

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

13.3.3 合并IO

13.3.4 用IO处理输入

13.3.5 扩展IO类型

13.3.6 使IO类型栈安全

13.4 总结

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

14.1 actor模型

14.1.1 异步消息

14.1.2 处理并行

14.1.3 处理actor状态变化

14.2 构建actor框架

14.2.1 actor框架的限制

14.2.2 设计actor框架接口

14.2.3 AbstractActor的实现

14.3 开始使用actor

14.3.1 实现乒乓示例

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

14.3.3 重新排序结果

14.3.4 解决性能问题

14.4 总结

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

15.1 使用断言来校验数据

15.2 从文件中读取属性

15.2.1 载入属性文件

15.2.2 将属性读取为字符串

15.2.3 生成更好的错误消息

15.2.4 像列表那样读取属性

15.2.5 读取枚举值

15.2.6 读取任意类型的属性

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

15.3.1 列出必需的函数

15.3.2 复合函数并应用作用

15.3.3 实现函数

15.3.4 让程序更加函数式

15.3.5 修复参数类型问题

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

15.3.7 处理元素名称错误

15.4 总结

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

A.1 Optional类

A.2 流

附录B Monad

附录C 敢问路在何方

C.1 选一门新的语言

C.1.1 Haskell

C.1.2 Scala

C.1.3 Kotlin

C.1.4 Frege

C.1.5 动态类型函数式语言怎么样

C.2 继续Java

C.2.1 Functional Java

C.2.2 Javaslang

C.2.3 Cyclops

C.2.4 其他函数式库

C.3 进一步阅读

Java函数式编程是2018年由电子工业出版社出版,作者[法] Pierre-Yves Saumont。

得书感谢您对《Java函数式编程》关注和支持,如本书内容有不良信息或侵权等情形的,请联系本网站。

购买这本书

你可能喜欢
Java编程从入门到精通 电子书
本书共14章,主要内容包括Java概述,基本类型与运算符,程序流程控制,数组,类与对象,抽象类、接口与嵌套类,GUI编程,Swing高级组件,异常与处理,I/O流与文件,多线程与并发,容器框架与泛型,字符串与正则表达式,反射与注解。
Java编程详解(微课版) 电子书
多年行业积累,让你在边学边练中熟练编写Java代码。
Java高级特性编程及实战 电子书
一站式实战型大数据应用开发学习指导,玩转Java高级特性。
Java Web应用开发教程(项目式) 电子书
本书共11章,详细讲解了网页开发所需的前端知识和JavaWeb开发的后端知识,其中网页开发前端知识包括Bootstrap框架和jQuery框架的使用,JavaWeb的后端知识包括JDBC技术、Servlet技术、JSP技术和JSTL等。本书在实战篇按照项目开发的流程实现小型超市管理系统,帮助读者更深刻地理解相关知识在项目开发中的使用技巧。
Java编程技术基础(微课版) 电子书
本书介绍了Java核心编程技术,内容涵盖了Java语言概述、Java语言的基本语法、运算符与流程控制、面向对象基础、继承与多态、接口、异常、常用类、集合框架、输入与输出、多线程、网络程序设计、JDBC数据库编程,以及综合案例等。