本书全面介绍了Java 8、9、10版本的新特性,包括Lambda表达式、方法引用、流、默认方法、Optional、CompletableFuture以及新的日期和时间API,是程序员了解Java新特性的经典指南。全书共分六个部分:基础知识、使用流进行函数式数据处理、使用流和Lambda进行高效编程、无所不在的Java、提升Java的并发性、函数式编程以及Java未来的演进。 拉乌尔–加布里埃尔·乌尔玛(Raoul-Gabriel Urma),剑桥大学计算机科学博士,软件工程师,培训师,现任Cambridge Spark公司CEO。在谷歌、eBay、甲骨文和高盛等大公司工作过,并参与过多个创业项目。活跃在技术社区,经常撰写技术文章,多次受邀在国际会议上做技术讲座。 马里奥·富斯科(Mario Fusco),Red Hat高级软件工程师,负责JBoss规则引擎Drools的核心开发。拥有丰富的Java开发经验,曾领导媒体公司、金融部门等多个行业的企业级项目开发。对函数式编程和领域特定语言等有浓厚兴趣,并创建了开放源码库lambdaj。 艾伦·米克罗夫特(Alan Mycroft),剑桥大学计算机实验室计算学教授,剑桥大学罗宾逊学院研究员,欧洲编程语言和系统协会联合创始人,树莓派基金会联合创始人和理事。发表过大约100篇研究论文,指导过20多篇博士论文。他的研究主要关注编程语言及其语义、优化和实施。他与业界联系紧密,曾于学术休假期间在ATT实验室和英特尔工作,还创立了Codemist公司,该公司设计了最初的ARM C编译器Norcroft。 【译者介绍】 陆明刚,毕业于四川大学,目前在Dell EMC中国卓越研发集团任高级主管工程师,曾任趋势科技中国软件研发中心技术经理,在信息科学和工程领域有十余年的实践和研究经验,拥有多项中国及美国专利。关注JVM性能调优和大数据及其实践,喜欢挖掘技术背后的内幕并乐此不疲。 劳佳,上海交通大学硕士,现任SAP(美国)高级软件支持顾问。业余爱好语言、数学、设计,英、法双语译者,近年翻译出版了《咨询的奥秘》《卓越程序员密码》《计算进化史:改变数学的命运》等书。 第 一部分 基础知识 第 1 章 Java 8、9、10以及11的变化 2 1.1 为什么要关心Java的变化 2 1.2 Java怎么还在变 4 1.2.1 Java在编程语言生态系统中的位置 5 1.2.2 流处理 6 1.2.3 用行为参数化把代码传递给方法 7 1.2.4 并行与共享的可变数据 8 1.2.5 Java需要演变 9 1.3 Java中的函数 9 1.3.1 方法和Lambda作为一等值 10 1.3.2 传递代码:一个例子 11 1.3.3 从传递方法到Lambda 13 1.4 流 14 1.5 默认方法及Java模块 17 1.6 来自函数式编程的其他好思想 19 1.7 小结 20 第 2 章 通过行为参数化传递代码 22 2.1 应对不断变化的需求 23 2.1.1 初试牛刀:筛选绿苹果 23 2.1.2 再展身手:把颜色作为参数 23 2.1.3 第三次尝试:对你能想到的每个属性做筛选 24 2.2 行为参数化 25 2.3 对付啰唆 30 2.3.1 匿名类 30 2.3.2 第五次尝试:使用匿名类 31 2.3.3 第六次尝试:使用Lambda表达式 32 2.3.4 第七次尝试:将List类型抽象化 33 2.4 真实的例子 33 2.4.1 用Comparator来排序 33 2.4.2 用Runnable执行代码块 34 2.4.3 通过Callable返回结果 35 2.4.4 GUI事件处理 35 2.5 小结 36 第 3 章 Lambda表达式 37 3.1 Lambda管中窥豹 37 3.2 在哪里以及如何使用Lambda 40 3.2.1 函数式接口 40 3.2.2 函数描述符 42 3.3 把Lambda付诸实践:环绕执行模式 44 3.3.1 第 1 步:记得行为参数化 44 3.3.2 第 2 步:使用函数式接口来传递行为 45 3.3.3 第 3 步:执行一个行为 45 3.3.4 第 4 步:传递Lambda 46 3.4 使用函数式接口 47 3.4.1 Predicate 47 3.4.2 Consumer 47 3.4.3 Function 48 3.5 类型检查、类型推断以及限制 52 3.5.1 类型检查 52 3.5.2 同样的Lambda,不同的函数式接口 53 3.5.3 类型推断 55 3.5.4 使用局部变量 56 3.6 方法引用 57 3.6.1 管中窥豹 57 3.6.2 构造函数引用 60 3.7 Lambda和方法引用实战 62 3.7.1 第 1 步:传递代码 62 3.7.2 第 2 步:使用匿名类 62 3.7.3 第 3 步:使用Lambda表达式 62 3.7.4 第 4 步:使用方法引用 63 3.8 复合Lambda表达式的有用方法 63 3.8.1 比较器复合 64 3.8.2 谓词复合 64 3.8.3 函数复合 65 3.9 数学中的类似思想 66 3.9.1 积分 66 3.9.2 与Java 8的Lambda联系起来 68 3.10 小结 68 第二部分 使用流进行函数式数据处理 第 4 章 引入流 72 4.1 流是什么 72 4.2 流简介 76 4.3 流与集合 78 4.3.1 只能遍历一次 79 4.3.2 外部迭代与内部迭代 80 4.4 流操作 82 4.4.1 中间操作 83 4.4.2 终端操作 84 4.4.3 使用流 84 4.5 路线图 85 4.6 小结 85 第 5 章 使用流 86 5.1 筛选 87 5.1.1 用谓词筛选 87 5.1.2 筛选各异的元素 87 5.2 流的切片 88 5.2.1 使用谓词对流进行切片 88 5.2.2 截短流 90 5.2.3 跳过元素 90 5.3 映射 91 5.3.1 对流中每一个元素应用函数 91 5.3.2 流的扁平化 92 5.4 查找和匹配 95 5.4.1 检查谓词是否至少匹配一个元素 95 5.4.2 检查谓词是否匹配所有元素 96 5.4.3 查找元素 96 5.4.4 查找第 一个元素 97 5.5 归约 98 5.5.1 元素求和 98 5.5.2 最大值和最小值 100 5.6 付诸实践 103 5.6.1 领域:交易员和交易 103 5.6.2 解答 104 5.7 数值流 106 5.7.1 原始类型流特化 107 5.7.2 数值范围 108 5.7.3 数值流应用:勾股数 108 5.8 构建流 111 5.8.1 由值创建流 111 5.8.2 由可空对象创建流 111 5.8.3 由数组创建流 112 5.8.4 由文件生成流 112 5.8.5 由函数生成流:创建无限流 113 5.9 概述 116 5.10 小结 116 第 6 章 用
阅读更多
漫游鲸二手书店
微信扫码去买书
扫码访问微信小程序