java lambda::_书评:精通Lambda:多核世界中的Java编程

java lambda::

从版本8开始,λ编程(lambda编程)终于在Java世界中引入。此功能将在很大程度上改变Java开发人员的编程方式以及针对样板代码的新“武器”。 Java 8通过引入新的Stream API,大部分已将函数式编程应用在Collections API中。 此外,此新功能有望使我们轻松进入多核世界,而无需担心线程,派生联接等问题。

将lambda功能集成到传统的面向对象的编程语言中一直是一个挑战,但是Oracle似乎在提供半功能性面向对象的语言方面做得很好,有点夸大了。
关于Java 8的许多书籍已经出版,使Java开发人员的生活更加轻松。 但是,只有少数几本书仅涉及Java 8中的λ编程。Maurice的书就是其中之一。

Maurice Naftalin是另一本著名的著作“ Java Generics and Collections ”的作者,并维护lambda FAQ ,他从中获得了有关新λ-API( JSR-335 )的大量经验。 长期经验的结果就是这本有关Java 8 lambda的新书。
尽管其他有关该主题的书籍都在描述新API时提供了简单的示例,但Maurice的书籍采用了更为实用的方式,描述了“使用Lambda表达式和流的最佳实践”。

该书解决了棘手的主题,没有像其他书籍一样提供简单的示例来演示API的用法。 作者试图利用他解决复杂问题的经验,以实用的方式向读者介绍新的思维方式。
更详细地:

第一章中, Maurice为这些Java 8新功能的推理奠定了基础,并将在他的其余书中进行分析:

  • 从内部到外部迭代
  • 从收藏到流
  • 从顺序到并行

他详细介绍了设计解决方案背后的原因以及上述主题的选定语法,从而使读者确信这些更改是多么自然地引入到语言中的。

第2章专门介绍lambda表达式。 它将lambda与匿名内部类进行比较,他讨论了变量捕获(也称为闭包),然后转到函数接口。 子章节应尽可能简洁。 他解释了静态绑定和非绑定实例方法引用之间的区别(您知道区别吗?)并以(函数)类型检查和重载解析规则(包括lambda表达式和方法引用)告终。

那么,为什么在绑定str::replace未绑定String::concat ? 根据莫里斯(Maurice)的说法,绑定方法引用是所谓的,因为方法引用是随接收器一起固定的。 所以str::replace等效于(x,y) -> str.replace(x,y) 。 您对接收器是什么没有任何选择。 它绑定到其receiver (str)

在调用接收器之前,尚未决定未绑定的方法引用。 所以String::concat等效于(receiver,str) -> receiver.concat(str) 。 它期望获得一个接收器作为其第一个参数。

第3章通过将流与管道进行比较来介绍流。 他描述了如何启动流(管道),如何对其进行转换(例如,过滤,映射,排序,截断等)以及如何结束它(例如,减少,收集,搜索等)。 他涉及并行和调试。 他提供了有用且务实的例子。

第4章讨论如何结束流,即减少和收集。 他还费劲地讲解如何编写自己的收藏家。 一切都通过图表说明了它们的工作方式以及示例。

第5章讨论如何创建流,即源和分离器。 在这里,他介绍了递归grep命令的工作示例,并描述了实现该命令必须解决的错误。 莫里斯(Maurice)在他的整本书中都没有提供解决方案。 通常,在他的推理中,您会发现类似以下的语句:“暂时停止阅读并考虑此数据结构的设计”或“如果尚未解决,请立即停止编写或概述代码” 。

第6章介绍流性能。 他使用jmh对基准流和并行流,排序,不同,分离器,收集器等进行微基准测试。并行流并不总是比顺序流快,但是它们必须满足一些条件才能比顺序流更好地执行。

最后, 第7章讨论了接口中的静态方法和默认方法,以及默认方法如何使API得以发展,同时保持向后兼容性。 他讨论了在哪里使用默认方法,并将具有默认方法的接口与抽象类进行了比较。

他介绍了继承,提供了​​两个易于记忆的规则:
a)“实例方法的选择优先于默认方法”
b)“如果一个类继承了多个竞争的默认方法,那么将选择不可覆盖的默认方法。”

本章涵盖了我所见过的关于默认和静态方法的主题的最完整的介绍。
您应该购买这本书的五个原因:

  • 小而简洁; 就个人而言,我完成一本175页的书(而我做到了)的机会要多于一本500或1000页的书。
  • 作者试图使您成为功能性程序员的思考。 他没有为您提供解决方案。
  • 它结构合理,易于找到所需的内容
  • 这是一本书,您将一遍又一遍
  • 它解决了性能问题,并提供了有关性能缺陷和反模式的有用建议。

他们说:“昂贵的香水装在小瓶中。” 总而言之,这本小巧实用的书非常有用,您将在使用Java 8中的新lambda和流API进行编程时,一遍又一遍地重访一本。Maurice的新书应该成为每一个Java的底蕴。想了解Java 8中的λ和流的开发人员。

图书链接: 精通Lambda:多核世界中的Java编程

翻译自: https://www.javacodegeeks.com/2014/12/book-review-mastering-lambdas-java-programming-in-a-multicore-world.html

java lambda::

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/338797.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

3皮卡丘眨眼代码_活见久,皮卡丘居然是一门编程语言

我很荣幸地向你介绍皮卡神教的编程语言,这门语言专为皮神设计(认真脸)。为什么一定要学习这门语言呢——谁不想要只皮卡丘我问你?在当今的宝可梦就业环境中,大多数皮卡丘们都在残忍的宝可梦训练师手下过着顺从和被奴役的生活。他们经常被迫与…

C语言关系运算符详解

关系运算符在使用时,它的的两边都会有一个表达式,比如变量、数值、加减乘除运算等,关系运算符的作用就是判明这两个表达式的大小关系。注意,是判明大小关系,不是其他关系。C语言提供了以下关系运算符:关系运…

sizeof不是java关键字是_下列哪项不是Java语言的关键字。

下列哪项不是Java语言的关键字。A:instanceofB:gotoC:volatileD:sizeof正确答案:sizeof解析:下列哪项不是Java语言的关键字。A:instanceofB:gotoC:volatileD:sizeof相关问题:汉代公主的丧葬不包括:A:柏椁B:没有墓道C:百官送葬D:樟棺大学生人际…

jboss fuse 教程_IDC关于使用JBoss Fuse的商业价值的报告(与Apache Camel一起使用)

jboss fuse 教程这只是一篇博客文章,具有更多的商业性质,但是您不能一无所有。 实际上,这也是使Apache Camel保持活力并保持良好状态的原因,这还归功于其商业上的成功。 希望从JBoss Fuse之类的产品中寻找有关在商业上使用Apache…

python list存储对象_python List 对象

从源码中可以看到,PyListObject中存储数据用的是PyObject **ob_item, 是当作Vector类似的方法。Items must normally not be NULL,这句是说list中的元素从list中删除,并不会立即free, 而是放到list的缓存池中。这个和整…

嵌入式软件架构设计分层思路

在正规的项目开发中,项目往往是并行开发的,也就是说硬件设计、底层软件设计、应用软件设计等是同步进行的。比如说在开发板上调试模块驱动,在其他平台上调试应用程序再移植到目前这个平台等。嵌入式专栏1为什么很少看见嵌入式软件架构师职位在…

python单元测试的应用_单元测试使用请求库的python应用程序

如果你使用具体请求尝试httmock.它的奇妙简单和优雅:from httmock import urlmatch, HTTMockimport requests# define matcher:urlmatch(netlocr(.*\.)?google\.com$)def google_mock(url, request):return Feeling lucky, punk?# open context to patchwith HTTM…

jconsole 使用_我的Wiki:使用JConsole对WildFly(或JBoss AS7)进行远程JMX访问

jconsole 使用与以前的版本相比,JBoss AS7的目标之一是使其在默认情况下更加安全。 受此目标直接影响的领域之一是,您不再期望服务器在端口上公开某些服务,而无需任何身份验证/授权即可访问它。 请记住,在以前的JBoss AS版本中&am…

python写入并获取剪切板内容_python写入并获取剪切板内容

{"moduleinfo":{"card_count":[{"count_phone":1,"count":1}],"search_count":[{"count_phone":4,"count":4}]},"card":[{"des":"阿里技术人对外发布原创技术内容的最大平台&…

C语言函数返回1和返回0究竟哪个好?

基本上,没有人会将大段的C语言代码全部塞入 main() 函数。更好的做法是按照复用率高、耦合性低的原则,尽可能的将代码拆分不同的功能模块,并封装成函数。C语言代码的组合千变万化,因此函数的功能可能会比较复杂,不同的…

java向指定文件继续写内容_java 向指定文件写入内容(如文件存在,则先删除再创建;写入如目录不存在,则创建)...

/*** 向指定文件写入内容(如文件存在,则先删除再创建写入)** param content 保存内容* param path 文件完整路径* throws IOException*/public static void save(String content, String path) throws IOException {FileWriter writer null;try {File file new Fi…

java ee4.8下载_在WildFly 8.2中修补焊接3 – Java EE 8的第一个实验RI

java ee4.8下载Java EE 8一直在发展,并且已经提出了几个新的组件JSR。 JSR 365将定义CDI 2.0的规范。 红帽已经开始开发Weld 3的实现原型, Alpha3最近发布了 。 Red Hat的Java EE 8兼容应用服务器将是WildFly,将在其中实现所有不同的技术。 …

乐高ev3搭建图_乐高EV3第一讲,Hello Ev3,搭建机甲战神模型

课程主题认识编程及结构。课程目标1.简单认识 Ev3 的硬件及使用2.学习 Ev3主控自带的功能(最好拿控制器给孩子演示讲解)联系同学们好!从今天开始我们就要进入乐高 EV3的世界,制作更多更酷、更好玩的机器人了!首先老师先来问大家几个基本的问题…

对单片机C语言的一些误用和总结

我觉得语言之所以能称之为语言,它肯定是一种工具一种相互交流相互通信相互传达之间的意图的工具,作为语言那肯定得有自己的语法,要想相互交流肯定得先学好它的语法吧(比如像表达式,函数,循环,指针)我称之为…

JAVA中使用bos做视频上传_JAVA语言之搭建物流BOS项目骨架

本文主要向大家介绍了JAVA语言之搭建物流BOS项目骨架,通过具体的内容向大家展示,希望对大家学习JAVA语言有所帮助。提供pom.xml4.0.0com.itheimabos-parent0.0.1-SNAPSHOTpom父工程4.2.4.RELEASE5.0.7.Final2.3.241.6.61.2.121.2.3org.springframeworksp…

js 使用多态替换条件语句_用多态和组成替换多个条件

js 使用多态替换条件语句用多态替换条件语句是一种众所周知的重构模式。 如果您不熟悉该模式,可以在此处查看 。 但是,一旦类中有多个条件检查所基于的字段,该基本解决方案便会开始崩溃。 我们将研究一些有关如何使用这些可能性的想法。 有很…

python连不上树莓派_树莓派respberry中cmake编译链接python2.7库不成功,求教

本人在树莓派pi3平台上,下载respberry 5.4 lite 编译一个github上的项目,该项目用cmake管理,目前看到 链接库阶段不成功。请教如何调整cmake的链接库目录,或是怎样直接调整生成的makefile,用于连编是一个主动降噪的项目…

java8 camel_WildFly 8的Camel子系统集成了Java EE –入门

java8 camel就在三天前,围绕Thomas Diesler( tdiesler )的团队发布了WildFly-Camel子系统的2.0.0.CR1版本,它允许您将Camel Routes添加为WildFly配置的一部分。 路由可以部署为JavaEE应用程序的一部分。 JavaEE组件可以访问Camel …

php简单网站源码包含数组_PHP无限分级阶梯递归数组排列 以及多层嵌套数组在网页中的解析源码...

数组递归PHP无限分级 将数组递归转化成阶梯型数组 数组中包含数组 使用更方便 查看也很方便,网上找的都不是很好,自己写的才是王道简单的递归 没有什么特别之处 只是自己写的容易理解一点而已!代码在下面$array[0]array(fid>1,top>0,n…

工程师总结:单片机C语言编程心得

一、.H文件与.C文件的关系:迄今为止,写过的程序都是一些很简单的程序,从来没有想到要自己写.H文件,也不知道.H文件到底什么用,与.C文件什么关系。只是最近写键盘程序,参考别人的程序时,发现别人…