从版本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编程相关推荐

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

    java lambda:: 从版本8开始,λ编程(lambda编程)终于在Java世界中引入.此功能将在很大程度上改变Java开发人员的编程方式以及针对样板代码的新"武器". Ja ...

  2. php 多核cpu,paip.提升性能--多核cpu中的java/.net/php/c++编程

    paip.提升性能--多核cpu中的java/.net/php/c++编程 作者Attilax  艾龙,  EMAIL:1466519819@qq.com  来源:attilax的专栏 地址:http ...

  3. eclipse中进行java编程时,CTRL+左键时,看不到源码的解决方法。

    第一种情况:eclipse中进行java编程时,CTRL+左键时,没有任何反应,解决方法: 设置方法:window-->preferences-- >General-->Editor ...

  4. python有null吗_Python世界中, 有Java中那种 @NotNull 吗( JetBrains提供的 ) ?

    2017/2/6 描述 在写Java的过程中, 这两个东西非常有用( 对付null ) 那么, Python世界中, 可否有类似实现 ? 检查函数的返回值 ( @NotNull 提供 ) 检查函数的形 ...

  5. java编程控制电脑硬件_如何快速学习AP计算机中的Java编程?

    AP Computer Science A (APCSA)考试,需要掌握Java编程语言.对于刚学习Java的同学,都应该了解Java编程语言的知识体系结构. 多编程零基础的高中生,在自学一段时间内, ...

  6. JMeter中级篇-6-JMeter中使用Java编程

    前面一篇,我们简单学习了BeanShell的用法,这篇我们继续借助BeanShell的使用,来测试一个Java工具类里面的方法调用.例如开发写了一个工具类,这个不是一个接口,但是供很多地方调用的一个工 ...

  7. JAVA中parameterized,Java编程中Parameterized Test-Junit

    一.Junit传参到单元测试的方式 在JUnit中,您可以通过以下方法将参数传递到单元测试方法: 构造函数 通过注解@Parameter注入 P.S 本教程测试使用Junit版本为4.12 二.多个参 ...

  8. 现实世界中哪些地方用到了Java?

     现实世界中哪些地方用到了Java? java android应用 电子商务 编程语言 应用程序 操作系统 除了Minecraft这款游戏以外,你有没有见过用Java编写的游戏.桌面系统.办公软件 ...

  9. .NET中的异步编程——常见的错误和最佳实践

    目录 背景 async void 没有线程 Foreach和属性 始终异步 在这篇文章中,我们将通过使用异步编程的一些最常见的错误来给你们一些参考. 背景 在之前的文章中,我们开始分析.NET世界中的 ...

最新文章

  1. Linux SVN命令详解
  2. 25个自适应菜单教程和脚本
  3. 002-docker17.06安装
  4. java调用webservice几种方式
  5. 利用java实现excel转pdf文件
  6. SqlServer死锁com.microsoft.sqlserver.jdbc.SQLServerException: Transaction (Process ID 52) was deadlock
  7. 文字处理技术:终于明白了压缩要怎么做
  8. web项目开发上传功能
  9. python调用微信截图_Python调用微信截图工具
  10. 深度学习中对神经网络的理解
  11. access查询女教师所有的信息_大学计算机2(Access数据库基础)_章节测验,期末考试,慕课答案查询公众号...
  12. 胜负无定数,敢搏成七分
  13. nginx安装部署和配置管理
  14. 图像分割算法实现(matlab/python)
  15. 苹果开发者账号登录的问题
  16. 检测JS数据类型的方法
  17. C++ Vecor 清空内存
  18. 京东涉足B2B 叫板阿里巴巴
  19. python自动化测试第三次课-----数据类型,list,元组,切片,字典
  20. 电商千万用户 mysql设计_Mysql电商设计用户模块 一

热门文章

  1. javaWeb服务详解(含源代码,测试通过,注释)
  2. Map的两种遍历方法
  3. Android实现动画Dialog
  4. ssm执行linux 指令,Linux逻辑卷快照及ssm的使用
  5. python重定向到socket_python套接字流重定向实例汇总
  6. MySQL检索数据(过滤+通配符+正则表达式)
  7. DFS应用——找出无向图的割点
  8. AOP切点表达式及通知类参数传递方式
  9. java掌握_掌握Java 11的Constantdynamic
  10. java ldap操作实例_Java Spring Security示例教程中的2种设置LDAP Active Directory身份验证的方法...