java函数式编程pdf高清扫描版-java函数式编程pdf完整下载电子书中文版

java函数式编程pdf高清扫描版-java函数式编程pdf完整下载电子书中文版

编辑点评:

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

java函数式编程pdf完整下载

内容简介

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

作者简介

是一名拥有三十年设计和构建企业级软件的Java发者。他目前是Alcatel-Lucent Submarine Networks公司的一名软件研发工程师。 高清华亚马逊软件研发工程师。工作十多年来,在简洁代码、自动化测试、持续交付、DevOps 等方面都有着丰富的经验。《DevOps 实践》译者之一。

java函数式编程pdf预览

java函数式编程pdf高清扫描版-java函数式编程pdf完整下载电子书中文版插图(1)

java函数式编程pdf高清扫描版-java函数式编程pdf完整下载电子书中文版插图(2)

java函数式编程pdf高清扫描版-java函数式编程pdf完整下载电子书中文版插图(3)

java函数式编程pdf高清扫描版-java函数式编程pdf完整下载电子书中文版插图(4)

java函数式编程pdf高清扫描版-java函数式编程pdf完整下载电子书中文版插图(5)

java函数式编程pdf高清扫描版-java函数式编程pdf完整下载电子书中文版插图(6)

java函数式编程pdf高清扫描版-java函数式编程pdf完整下载电子书中文版插图(7)

目录

译者序

译者简介

为什么要函数式编程

序言

致谢

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 敢问路在何方

原文摘录

如果思考一下,你很快就会意识到,如果Java不提供这些惰性,那它就什么也做不了。你能想象一个f1se结构的两个分支都会系统地被计算吗?或者能想象一个不可能从中脱离的循环吗?所有语言都需要在某种情况下提供惰性。不过,标准Java所能提供的惰性对函数式编程而言还不够。

9.1.2严格带来的问题严格在像Java这样的语言中是如此重要,以至于它被许多程序员当作对表达式赋值的唯一可能性,即便完全严格的语言在现实中什么都做不了。此外,Java的文档并没有使用 non-strict(非严格)或laxy(惰性)这两个词语来描述惰性结构。例如布尔运算符11和5不叫惰性,而叫 short-circuiting(短路)。但简单的事实是:这些运算符对于它们的参数面言是非严格的。我们可以很容易地展示这与方法参数的严格”求值有何不同。

想象你打算用函数来模拟布尔运算符。清单9.1展示了你所要做的。

清单91nd和oE逻辑方法 public class BooleanMethods ublic static void main (string 0 args) system, out, println(or (true, true)):

System. out. println(or(true, false))i system. out. println(or False, truel)i System. out. println(orIfalse, false)):

system, out, println and(true, truel); System. out. printInand (true, false)l:

Syatem. out. printIn(and(false, true))i system. out. println(and ( false, false)):

public static boolean or(boolean a, boolean b) I return a 7 true b 7 true false:

显然,or方法与11运算符并不等价。区别就是11惰性地计算操作数,这意味着当第一个操作数为true时,第二个操作数并不会被计算,因为它不是计算结果所必需的。但是or方法严格地计算它的参数,这意味着即使不需要第二个参数的值也会计算它,从而导致抛出I11 egalstateException当你在第6章和第7章中使用 store1se方法时也碰到过这个问题,因为参数总是会被赋值,即使计算已经成功。

9.2实现惰性惰性在许多场合中都是必需的。Java其实对像ife1se、循环和try. catch这样的代码块结构使用了惰性。没有惰性的话,一段 catch代码块甚至会在没有异常的时候进行计算。在提供错误行为和操作无限数据结构时必须实现惰性在Java里实现惰性井不是完全不可能的,你可以通过上一章中用过的Supplier类来创造出一个相似的:

public interface Supplier<r> I请注意你创建了自己的类,但是Java8也提供了一个 Supplier类。究竟使用哪一个你就自己决定吧,它们完全等价。

通过使用 Supplier类,你可以如下重写 BooleanMethods的例子,如清单9.3

java函数式编程pdf完整下载截图

java函数式编程pdf高清扫描版-java函数式编程pdf完整下载电子书中文版插图(8)java函数式编程pdf高清扫描版-java函数式编程pdf完整下载电子书中文版插图(9)java函数式编程pdf高清扫描版-java函数式编程pdf完整下载电子书中文版插图(10)java函数式编程pdf高清扫描版-java函数式编程pdf完整下载电子书中文版插图(11)java函数式编程pdf高清扫描版-java函数式编程pdf完整下载电子书中文版插图(12)java函数式编程pdf高清扫描版-java函数式编程pdf完整下载电子书中文版插图(13)java函数式编程pdf高清扫描版-java函数式编程pdf完整下载电子书中文版插图(14)

评分及评论

无用户评分

来评个分数吧

  • 5 分
    0
  • 4 分
    0
  • 3 分
    0
  • 2 分
    0
  • 1 分
    0

Comments