书评:精通Lambda:多核世界中的Java编程
从版本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
书评:精通Lambda:多核世界中的Java编程相关推荐
- java lambda::_书评:精通Lambda:多核世界中的Java编程
java lambda:: 从版本8开始,λ编程(lambda编程)终于在Java世界中引入.此功能将在很大程度上改变Java开发人员的编程方式以及针对样板代码的新"武器". Ja ...
- php 多核cpu,paip.提升性能--多核cpu中的java/.net/php/c++编程
paip.提升性能--多核cpu中的java/.net/php/c++编程 作者Attilax 艾龙, EMAIL:1466519819@qq.com 来源:attilax的专栏 地址:http ...
- eclipse中进行java编程时,CTRL+左键时,看不到源码的解决方法。
第一种情况:eclipse中进行java编程时,CTRL+左键时,没有任何反应,解决方法: 设置方法:window-->preferences-- >General-->Editor ...
- python有null吗_Python世界中, 有Java中那种 @NotNull 吗( JetBrains提供的 ) ?
2017/2/6 描述 在写Java的过程中, 这两个东西非常有用( 对付null ) 那么, Python世界中, 可否有类似实现 ? 检查函数的返回值 ( @NotNull 提供 ) 检查函数的形 ...
- java编程控制电脑硬件_如何快速学习AP计算机中的Java编程?
AP Computer Science A (APCSA)考试,需要掌握Java编程语言.对于刚学习Java的同学,都应该了解Java编程语言的知识体系结构. 多编程零基础的高中生,在自学一段时间内, ...
- JMeter中级篇-6-JMeter中使用Java编程
前面一篇,我们简单学习了BeanShell的用法,这篇我们继续借助BeanShell的使用,来测试一个Java工具类里面的方法调用.例如开发写了一个工具类,这个不是一个接口,但是供很多地方调用的一个工 ...
- JAVA中parameterized,Java编程中Parameterized Test-Junit
一.Junit传参到单元测试的方式 在JUnit中,您可以通过以下方法将参数传递到单元测试方法: 构造函数 通过注解@Parameter注入 P.S 本教程测试使用Junit版本为4.12 二.多个参 ...
- 现实世界中哪些地方用到了Java?
现实世界中哪些地方用到了Java? java android应用 电子商务 编程语言 应用程序 操作系统 除了Minecraft这款游戏以外,你有没有见过用Java编写的游戏.桌面系统.办公软件 ...
- .NET中的异步编程——常见的错误和最佳实践
目录 背景 async void 没有线程 Foreach和属性 始终异步 在这篇文章中,我们将通过使用异步编程的一些最常见的错误来给你们一些参考. 背景 在之前的文章中,我们开始分析.NET世界中的 ...
最新文章
- Linux SVN命令详解
- 25个自适应菜单教程和脚本
- 002-docker17.06安装
- java调用webservice几种方式
- 利用java实现excel转pdf文件
- SqlServer死锁com.microsoft.sqlserver.jdbc.SQLServerException: Transaction (Process ID 52) was deadlock
- 文字处理技术:终于明白了压缩要怎么做
- web项目开发上传功能
- python调用微信截图_Python调用微信截图工具
- 深度学习中对神经网络的理解
- access查询女教师所有的信息_大学计算机2(Access数据库基础)_章节测验,期末考试,慕课答案查询公众号...
- 胜负无定数,敢搏成七分
- nginx安装部署和配置管理
- 图像分割算法实现(matlab/python)
- 苹果开发者账号登录的问题
- 检测JS数据类型的方法
- C++ Vecor 清空内存
- 京东涉足B2B 叫板阿里巴巴
- python自动化测试第三次课-----数据类型,list,元组,切片,字典
- 电商千万用户 mysql设计_Mysql电商设计用户模块 一
热门文章
- javaWeb服务详解(含源代码,测试通过,注释)
- Map的两种遍历方法
- Android实现动画Dialog
- ssm执行linux 指令,Linux逻辑卷快照及ssm的使用
- python重定向到socket_python套接字流重定向实例汇总
- MySQL检索数据(过滤+通配符+正则表达式)
- DFS应用——找出无向图的割点
- AOP切点表达式及通知类参数传递方式
- java掌握_掌握Java 11的Constantdynamic
- java ldap操作实例_Java Spring Security示例教程中的2种设置LDAP Active Directory身份验证的方法...