Java 8实战.pdf
《Java 8实战.pdf》由会员分享,可在线阅读,更多相关《Java 8实战.pdf(374页珍藏版)》请在咨信网上搜索。
1、图灵社区的电子书没有采用专有客户端,您可以在任意设备上,用自己喜欢的浏览器和PDF阅读器进行阅读。但您购买的电子书仅供您个人使用,未经授权,不得进行传播。我们愿意相信读者具有这样的良知和觉悟,与我们共同保护知识产权。如果购买者有侵权行为,我们可能对该用户实施包括但不限于关闭该帐号等维权措施,并可能追究法律责任。?内 容 提 要本书全面介绍了 Java 8 这个里程碑版本的新特性,包括 Lambdas、流和函数式编程。有了函数式的编程特性,可以让代码更简洁,同时也能自动化地利用多核硬件。全书分四个部分:基础知识、函数式数据处理、高效 Java 8 编程和超越 Java 8,清晰明了地向读者展现了
2、一幅 Java 与时俱进的现代化画卷。本书适合广大 Java 开发人员阅读。定价:79.00元读者服务热线:(010)51095186转600印装质量热线:(010)81055316反盗版热线:(010)81055315广告经营许可证:京东工商广字第 8052 号著英 Raoul-Gabriel Urma 意 Mario Fusco 英 Alan Mycroft译陆明刚劳佳责任编辑岳新欣执行编辑郭亚维责任印制彭志环人民邮电出版社出版发行北京市丰台区成寿寺路11号邮编100164电子邮件网址http:/北京印刷开本:80010001/16印张:23 字数:552千字 2016年 4 月第 1 版
3、印数:4 501 5 500册 2016年 11 月北京第 3 次印刷著作权合同登记号 图字:01-2016-1573号(2016.11重印)前 言 1 版 权 声 明 Original English language edition,entitled Java 8 in Action:Lambdas,streams and functional-style programming by Raoul-Gabriel Urma,Mario Fusco,Alan Mycroft,published by Manning Publications.178 South Hill Drive,West
4、ampton,NJ 08060 USA.Copyright 2015 by Manning Publications.Simplified Chinese-language edition copyright 2016 by Posts&Telecom Press.All rights reserved.本书中文简体字版由Manning Publications授权人民邮电出版社独家出版。未经出版者书面许可,不得以任何方式复制或抄袭本书内容。版权所有,侵权必究。谨以此书献给我们的父母。2 前 言 序 言 1998年,八岁的我拿起了我此生第一本计算机书,那本书讲的是JavaScript和HTML
5、。我当时怎么也想不到,打开那本书会让我见识编程语言和它们能够创造的神奇世界,并会彻底改变我的生活。我被它深深地吸引了。如今,编程语言的某个新特性还会时不时地让我感到兴奋,因为它让我花更少的时间就能够写出更清晰、更简洁的代码。我希望本书探讨的Java 8中那些来自函数式编程的新思想,同样能够给你启迪。那么,你可能会问,这本书是怎么来的呢?2011年,甲骨文公司的Java语言架构师Brian Goetz分享了一些在Java中添加Lambda表达式的提议,以期获得业界的参与。这让我重新燃起了兴趣,于是我开始传播这些想法,在各种开发人员会议上组织Java 8讨论班,并为剑桥大学的学生开设讲座。到了20
6、13年4月,消息不胫而走,Manning出版社的编辑给我发了封邮件,问我是否有兴趣写一本书关于Java 8中Lambda的书。当时我只是个“不起眼”的二年级博士生,似乎写书并不是一个好主意,因为它会耽误我提交论文。另一方面,所谓“只争朝夕”,我想写一本小书不会有太多工作量,对吧?(后来我才意识到自己大错特错!)于是我咨询我的博士生导师Alan Mycroft教授,结果他十分支持我写书(甚至愿意为这种与博士学位无关的工作提供帮助,我永远感谢他)。几天后,我们见到了Java 8的布道者Mario Fusco,他有着非常丰富的专业经验,并且因在重大开发者会议上所做的函数式编程演讲而享有盛名。我们很快
7、就认识到,如果将大家的能量和背景融合起来,就不仅仅可以写出一本关于Java 8的Lambda的小书,而是可以写出(我们希望)一本五年或十年后,在Java领域仍然有人愿意阅读的书。我们有了一个非常难得的机会来深入讨论许多话题,它们不但有益于Java程序员,还打开了通往一个新世界的大门:函数式编程。15个月后,到2014年7月,在经历无数个漫漫长夜的辛苦工作、无数次的编辑和永生难忘的体验后,我们的工作成果终于送到了你的手上。希望你会喜欢它!Raoul-Gabriel Urma 于剑桥大学 致 谢 1 1 2 3 4 5 8 10 11 9 6 7 致 谢 如果没有许多杰出人士的支持,这本书是不可能
8、完成的。自愿提供宝贵审稿建议的朋友:Richard Walker、Jan Saganowski、Brian Goetz、Stuart Marks、Cem Redif、Paul Sandoz、Stephen Colebourne、igo Mediavilla、Allahbaksh Asadullah、Tomasz Nurkiewicz和Michael Mller。曼宁早期访问项目(Manning Early Access Program,MEAP)中在作者在线论坛上发表评论的读者。在编撰过程中提供有益反馈的审阅者:Antonio Magnaghi、Brent Stains、Franziska M
9、eyer、Furkan Kamachi、Jason Lee、Jrn Dinkla、Lochana Menikarachchi、Mayur Patil、Nikolaos Kaintantzis、Simone Bordet、Steve Rogers、Will Hayworth和William Wheeler。Manning的开发编辑Susan Conant耐心回答了我们所有的问题和疑虑,并为每一章的初稿提供了详尽的反馈,并尽其所能支持我们。Ivan Todorovi和Jean-Franois Morin在本书付印前进行了全面的技术审阅,Al Scherer则在编撰过程中提供了技术帮助。Raoul-
10、Gabriel Urma 首先,我要感谢我的父母在生活中给予我无尽的爱和支持。我写一本书的小小梦想如今成真了!其次,我要向信任并且支持我的博士生导师和合著者Alan Mycroft表达无尽的感激。我也要感谢合著者Mario Fusco陪我走过这段有趣的旅程。最后,我要感谢在生活中为我提供指导、有用建议,给予我鼓励的朋友们:Sophia Drossopoulou、Aidan Roche、Warris Bokhari、Alex Buckley、Martijn Verburg、Tomas Petricek和Tian Zhao。你们真是太棒啦!Mario Fusco 我要特别感谢我的妻子Marilen
11、a,她无尽的耐心让我可以专注于写作本书;还有我们的女儿Sofia,因为她能够创造无尽的混乱,让我可以从本书的写作中暂时抽身。你在阅读本书时将发现,Sofia还用只有两岁小女孩才会的方式,告诉我们内部迭代和外部迭代之间的差异。我还要感谢Raoul-Gabriel Urma和Alan Mycroft,他们与我一起分享了写作本书的(巨大)喜悦和(小小)痛苦。2 致 谢 Alan Mycroft 我要感谢我的太太Hilary和其他家庭成员在本书写作期间对我的忍受,我常常说“再稍微弄弄就好了”,结果一弄就是好几个小时。我还要感谢多年来的同事和学生,他们让我知道了怎么去教授知识。最后,感谢Mario和Ra
12、oul这两位非常高效的合著者,特别是Raoul在苛求“周五再交出一部分稿件”时,还能让人愉快地接受。关于本书 1 1 2 3 4 5 8 10 11 9 6 7 关于本书 简单地说,Java 8中的新增功能是自Java 1.0发布18年以来,Java发生的最大变化。没有去掉任何东西,因此你现有的Java代码都能工作,但新功能提供了强大的新语汇和新设计模式,能帮助你编写更清楚、更简洁的代码。就像遇到所有新功能时那样,你一开始可能会想:“为什么又要去改我的语言呢?”但稍加练习之后,你就会发觉自己只用预期的一半时间,就用新功能写出了更短、更清晰的代码,这时你会意识到自己永远无法返回到“旧Java”了
13、。本书会帮助你跨过“原理听起来不错,但还是有点儿新,不太适应”的门槛,从而熟练地进行编程。“也许吧,”你可能会想,“可是Lambda、函数式编程,这些不是那些留着胡子、穿着凉鞋的学究们在象牙塔里面琢磨的东西吗?”或许是的,但Java 8中加入的新想法的分量刚刚好,它们带来的好处也可以被普通的Java程序员所理解。本书会从普通程序员的角度来叙述,偶尔谈谈“这是怎么来的”。“Lambda,听起来跟天书一样!”是的,也许是这样,但它是一个很好的想法,让你可以编写简明的Java程序。许多人都熟悉事件处理器和回调函数,即注册一个对象,它包含会在事件发生时使用的一个方法。Lambda使人更容易在Java中
14、广泛应用这种思想。简单来说,Lambda和它的朋友“方法引用”让你在做其他事情的过程中,可以简明地将代码或方法作为参数传递进去执行。在本书中,你会看到这种思想出现得比预想的还要频繁:从加入作比较的代码来简单地参数化一个排序方法,到利用新的Stream API在一组数据上表达复杂的查询指令。“流(stream)是什么?”这是Java 8的一个新功能。它们的特点和集合(collection)差不多,但有几个明显的优点,让我们可以使用新的编程风格。首先,如果你使用过SQL等数据库查询语言,就会发现用几行代码写出的查询语句要是换成Java要写好长。Java 8的流支持这种简明的数据库查询式编程但用的是
15、Java语法,而无需了解数据库!其次,流被设计成无需同时将所有的数据调入内存(甚至根本无需计算),这样就可以处理无法装入计算机内存的流数据了。但Java 8可以对流做一些集合所不能的优化操作,例如,它可以将对同一个流的若干操作组合起来,从而只遍历一次数据,而不是花很大代价去多次遍历它。更妙的是,Java可以自动将流操作并行化(集合可不行)。“还有函数式编程,这又是什么?”就像面向对象编程一样,它是另一种编程风格,其核心是把函数作为值,前面在讨论Lambda的时候提到过。2 关于本书 Java 8的好处在于,它把函数式编程中一些最好的想法融入到了大家熟悉的Java语法中。有了这个优秀的设计选择,
16、你可以把函数式编程看作Java 8中一个额外的设计模式和语汇,让你可以用更少的时间,编写更清楚、更简洁的代码。想想你的编程兵器库中的利器又多了一样。当然,除了这些在概念上对Java有很大扩充的功能,我们也会解释很多其他有用的Java 8功能和更新,如默认方法、新的Optional类、CompletableFuture,以及新的日期和时间API。别急,这只是一个概览,现在该让你自己去看看本书了。本书结构 本书分为四个部分:“基础知识”“函数式数据处理”“高效Java 8编程”和“超越Java 8”。我们强烈建议你按顺序阅读,因为很多概念都需要前面的章节作为基础。大多数章节都有几个小测验,帮助你学
17、习和掌握这些内容。第一部分包括3章,旨在帮助你初步使用Java 8。学完这一部分,你将会对Lambda表达式有充分的了解,并可以编写简洁而灵活的代码,能够轻松适应不断变化的需求。在第1章中,我们总结了Java的主要变化(Lambda表达式、方法引用、流和默认方法),并为学习后面的内容做好准备。在第2章中,你将了解行为参数化,这是Java 8非常依赖的一种软件开发模式,也是引入Lambda表达式的主要原因。第3章全面地解释了Lambda表达式和方法引用,每一步都有代码示例和测验。第二部分仔细讨论了新的Stream API。学完这一部分,你将充分理解流是什么,以及如何在Java应用程序中使用它们来
18、简洁而高效地处理数据集。第4章介绍了流的概念,并解释它们与集合有何异同。第5章详细讨论了表达复杂数据处理查询可以使用的流操作。我们会谈到很多模式,如筛选、切片、查找、匹配、映射和归约。第6章讲到了收集器Stream API的一个功能,可以让你表达更为复杂的数据处理查询。在第7章中,你将了解流如何得以自动并行执行,并利用多核架构的优势。此外,你还会学到为正确而高效地使用并行流,要避免的若干陷阱。第三部分探讨了能让你高效使用Java 8并在代码中运用现代语汇的若干内容。第8章探讨了如何利用Java 8的新功能和一些秘诀来改善你现有的代码。此外,该章还探讨了一些重要的软件开发技术,如设计模式、重构、
19、测试和调试。在第9章中,你将了解到默认方法是什么,如何利用它们来以兼容的方式演变API,一些实际的应用模式,以及有效使用默认方法的规则。第10章谈到了新的java.util.Optional类,它能让你设计出更好的API,并减少空指针异常。第11章探讨了CompletableFuture,它可以让你用声明性方式表达复杂的异步计算,从而让Stream API的设计并行化。关于本书 3 1 2 3 4 5 8 10 11 9 6 7 第12章探讨了新的日期和时间API,这相对于以前涉及日期和时间时容易出错的API是一大改进。在本书最后一部分,我们会返回来谈谈怎么用Java编写高效的函数式程序,还会
20、将Java 8的功能和Scala作一比较。第13章是一个完整的函数式编程教程,介绍了一些术语,并解释了如何在Java 8中编写函数式风格的程序。第14章涵盖了更高级的函数式编程技巧,包括高阶函数、科里化、持久化数据结构、延迟列表和模式匹配。你可以把这一章看作一种融合,既有可以用在代码库中的实际技术,也有让你成为更渊博的程序员的学术知识。第15章对比了Java 8的功能与Scala的功能。Scala和Java一样,是一种实施在JVM上的语言,近年来迅速发展,在编程语言生态系统中已经威胁到了Java的一些方面。在第16章我们会回顾这段学习Java 8并慢慢走向函数式编程的历程。此外,我们还会猜测,
21、在Java 8之后,未来可能还有哪些增强和新功能出现。最后,本书有四个附录,涵盖了与Java 8相关的其他一些话题。附录A总结了本书未讨论的一些Java 8的小特性。附录B概述了Java库的其他主要扩展,可能对你有用。附录C是第二部分的延续,谈到了流的高级用法。附录D探讨了Java编译器在幕后是如何实现Lambda表达式的。代码惯例和下载 所有代码清单和正文中的源代码都采用等宽字体(如fixed-widthfontlikethis),以与普通文字区分开来。许多代码清单中都有注释,突出了重要的概念。书中所有示例代码和执行说明均可见于https:/ 购买本书即可免费访问Manning Public
22、ations运营的一个私有在线论坛,你可以在那里发表关于本书的评论、询问技术问题,并获得作者和其他用户的帮助。如欲访问作者在线论坛并订阅,请用浏览器访问https:/ 前 言 关于封面图 本书封面上的图为“1700年中国清朝满族战士的服饰”。图片中的人物衣饰华丽,身佩利剑,背背弓和箭筒。如果你仔细看他的腰带,会发现一个形的带扣(这是我们的设计师加上去的,暗示本书的主题)。该图选自托马斯杰弗里斯的各国古代和现代服饰集(A Collection of the Dresses of Different Nations,Ancient and Modern,伦敦,1757年至1772年间出版),该书标
23、题页中说这些图是手工上色的铜版雕刻品,并且是用阿拉伯树胶填充的。托马斯杰弗里斯(Thomas Jefferys,17191771)被称为“乔治三世的地理学家”。他是一名英国制图员,是当时主要的地图供应商。他为政府和其他官方机构雕刻和印制地图,制作了很多商业地图和地理地图集,尤以北美地区为多。地图制作商的工作让他对勘察和绘图过的地方的服饰产生了兴趣,这些都在这个四卷本中得到了出色的展现。向往遥远的土地、渴望旅行,在18世纪还是相对新鲜的现象,而类似于这本集子的书籍则十分流行,这些集子向旅游者和坐着扶手椅梦想去旅游的人介绍了其他国家的人。杰弗里斯书中异彩纷呈的图画生动地描绘了几百年前世界各国的独特
24、与个性。如今,着装规则已经改变,各个国家和地区一度非常丰富的多样性也已消失,来自不同大陆的人仅靠衣着已经很难区分开了。不过,要是乐观点儿看,我们这是用文化和视觉上的多样性,换得了更多姿多彩的个人生活或是更为多样化、更为有趣的知识和技术生活。计算机书籍一度也是如此繁荣,Manning出版社在此用杰弗里斯画中复活的三个世纪前风格各异的国家服饰,来象征计算机行业中的发明与创造的异彩纷呈。目 录 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 18 17 目 录 第一部分 基础知识 第 1 章 为什么要关心 Java 8.2 1.1 Java 怎么还在变.4 1.1.1
25、Java 在编程语言生态系统中的位置.4 1.1.2 流处理.6 1.1.3 用行为参数化把代码传递给 方法.7 1.1.4 并行与共享的可变数据.7 1.1.5 Java 需要演变.8 1.2 Java 中的函数.8 1.2.1 方法和 Lambda 作为一等公民.9 1.2.2 传递代码:一个例子.11 1.2.3 从传递方法到 Lambda.12 1.3 流.13 1.4 默认方法.17 1.5 来自函数式编程的其他好思想.18 1.6 小结.19 第 2 章 通过行为参数化传递代码.20 2.1 应对不断变化的需求.21 2.1.1 初试牛刀:筛选绿苹果.21 2.1.2 再展身手:把
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- Java 8实战 实战
1、咨信平台为文档C2C交易模式,即用户上传的文档直接被用户下载,收益归上传人(含作者)所有;本站仅是提供信息存储空间和展示预览,仅对用户上传内容的表现方式做保护处理,对上载内容不做任何修改或编辑。所展示的作品文档包括内容和图片全部来源于网络用户和作者上传投稿,我们不确定上传用户享有完全著作权,根据《信息网络传播权保护条例》,如果侵犯了您的版权、权益或隐私,请联系我们,核实后会尽快下架及时删除,并可随时和客服了解处理情况,尊重保护知识产权我们共同努力。
2、文档的总页数、文档格式和文档大小以系统显示为准(内容中显示的页数不一定正确),网站客服只以系统显示的页数、文件格式、文档大小作为仲裁依据,个别因单元格分列造成显示页码不一将协商解决,平台无法对文档的真实性、完整性、权威性、准确性、专业性及其观点立场做任何保证或承诺,下载前须认真查看,确认无误后再购买,务必慎重购买;若有违法违纪将进行移交司法处理,若涉侵权平台将进行基本处罚并下架。
3、本站所有内容均由用户上传,付费前请自行鉴别,如您付费,意味着您已接受本站规则且自行承担风险,本站不进行额外附加服务,虚拟产品一经售出概不退款(未进行购买下载可退充值款),文档一经付费(服务费)、不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
4、如你看到网页展示的文档有www.zixin.com.cn水印,是因预览和防盗链等技术需要对页面进行转换压缩成图而已,我们并不对上传的文档进行任何编辑或修改,文档下载后都不会有水印标识(原文档上传前个别存留的除外),下载后原文更清晰;试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓;PPT和DOC文档可被视为“模板”,允许上传人保留章节、目录结构的情况下删减部份的内容;PDF文档不管是原文档转换或图片扫描而得,本站不作要求视为允许,下载前自行私信或留言给上传者【二***】。
5、本文档所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用;网站提供的党政主题相关内容(国旗、国徽、党徽--等)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
6、文档遇到问题,请及时私信或留言给本站上传会员【二***】,需本站解决可联系【 微信客服】、【 QQ客服】,若有其他问题请点击或扫码反馈【 服务填表】;文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“【 版权申诉】”(推荐),意见反馈和侵权处理邮箱:1219186828@qq.com;也可以拔打客服电话:4008-655-100;投诉/维权电话:4009-655-100。