Java大佬带你深入了解lambda表达式,编写更优雅的Java
前言
一般来说, 在数学与计算中,lambda表达式指的是一个函数:对于输入值的部分或全部组合来说,它会指定一个输出值。到目前为止,在Java中还没有办法编写独立的函数。我们常常使用方法来代替函数,不过它总是作为对象或类的一部分而存在。现在,lambda表达式提供了一种与独立函数更为近似的方式.在传统的Java术语中,lambda 可以看成一-种匿 名方法,拥有更为简洁的语法,可以省略修饰符、返回类型、throws语句,在某些情况下还可以省略参数类型。
《精通lambda表达式: Java多核编程》目录
《精通lambda表达式: Java多核编程》以分层。有序的方式详细介绍了Java SE 8中关子语言与库的新特性,包括lambda表达式、默认方法与Streams 库等。更为重要的是,它将特性的细节与底层的设计决策联系起来,促使读者能够理解背后的动机与原则,从而最大限度地掌握这些新特性。与此同时,本书专注于真正的价值,这不是特性本身,而是特性所带来的好处:表述性更强、更为强大且不易出错的用户代码。让读者意识到这种好处是本书真正所关注的方面。
因为篇幅限制,为了节省大家的时间,小编接下来会介绍一下书中的一部分
第1章 走进新生代的Java
1.1 从外部迭代到内部迭代
1.2从集合到流
1.3从串行到并行
1.4组合行为
本章小结:在刚开始的小节中,我们看到了它们是如何提升性能的,库开发者可以通过lamboda 表达式实现自动的并行化。虽然这种改进未必是普遍的一本书的一一个目标就是帮助你理解应用何时会从“并行化”中获益.一但它代表 了向正确方向前进的一大步,让应用程序员能够利用现代硬件的性能改进。最后一-节介绍了lambda是如何促使我们编写出更棒的API的。Comparator.comparing的签名就是一个信号:随着客户端程序员逐步习惯于提供诸如lcomparing所接受的关键字抽取函数。comparing这样细粒度的库方法将会成为标准,借助于此,客户瑞编码的风格将会得到改进,代码也会得到简化。
第2章Java lambda表达式的基础知识
2.1 lambda表达式的定义
2.2 lambda与匿名内部类
2.3变量捕获
2.4函数式接口
2.5使用lambda表达式
2.6方法与构造器引用
2.7类型检查
2.8 重载解析
本章小结:到目前为止,我们已经介绍了为引入lambda需要做的所有语法变更: Java 8的另一个主要变化是引入了默认方法,通过允许接口定义行为来支持API的演化。第7章將会介绍默认方法。本章介绍的一些细节看起来可能很复杂,不过总的来说,背后的想法是非常简单的,至少要比最终版本形成之前的中间阶段简单不少。.语言的演进总是困难的,因为每个新特性都会与现有特性存在或多或少的交互:复杂性就是个典型,这在本章中已经介绍过了,装箱/拆箱与无类型的聚合表达式对方法重载解析引入了很多复杂性。另外就是编写可以抛出检查的异常的lambda表达式是很困难的。在lambda语法的设计与实现中曾考虑过很多折中方案,其中与类型推断相关的方案最为引人关注,主要是因为它有时不如你想象的那么强大。这是因为在设计类型推断规则时最重要的推动力就是保持其简单性和一-致性,这个想法也指导着整个语言的设计。
第3章流与管道介绍
3.1 流基础
3.2 剖析管道
本章介绍流底层的基本理念,通过关于流操作的直观示例帮助大家理解流的工作方式。后续章节将会进一-步探索更加理论化的主题,介绍流代码是如何简化常见的集合处理任务的,最后研究一下不同场景下串行流与并行流的性能。
第4章终止流:收集与汇聚
4.1使用收集器
4.2 剖析收集器
4.3编写收集器
4.4汇聚
本章小结:本章介绍了如何通过Stream API获取流处理的汇总结果。总体来说可以分为两类:汇聚与收集。汇聚旨在汇总不变值。而Stream API则提供了各种便捷方法来支持汇聚,特别是针对原生值的汇聚。不过,最重要的技术则是收集,它是汇聚的-一般化,可以将并发积聚汇总到可变集合中,甚至还可以管理对那些非线程安全集合的访问。我们介绍了用于积聚到标准库集合、自定义集合以及分类映射的库收集器。由于收集器本身采用了组合模式,因此库也包含了大量专门用于与其他收集器组合使用的收集器。
第5章 起始流:源与分割迭代器
5.1创建流
5.2分割迭代器与Fork/Join
5.3异常
5.4示例说明:递归grep
本章小结:本章有3个目的,且这些目的之间都存在着关联:探索用于创建流的库设施、解释流创建的工作机制,解释如何以及为何要编写自己的实现。我们看到流方法被添加到了众多平台类中,这样流就可以通过中间操作来传递任意种类的数据以进行处理,井最终发送给终止操作。在通过这些方法处理流时,你会受益于并行代码的丰富表现力与可读性:是否可以高效地提取出并行化取决于流源分割数据的效率。
.第6章流的性能
6.1微基准度量
6.2选择执行模式
6.3流的特性
6.4排序
6.5有状态操作与无状态操作
6.6装箱与拆箱
6.7分割迭代器性能
6.8收集器性能
本章小结:使用lambda与流的两个原因:编写更好的程序,获得更好的性能。到目前为止,我们看到的代码示例已经展示了通过lambda与流可以编写出更好的程序,不过性能方面却并没有给出相关说明。本章通过微基准测试技术阐述这点。
总结
本文档共分为7章,按照由浅入深、循序渐进的方式对Javalamboda表达式进行了深入的剖析与介绍。首先从Java 8新特性开始,对lambda表达式了作简 要说明:接下来介绍lambda表达式的基础,让读者对lambda表达式有个感性的认识:然后对流与管道进行深入的讲解,同时剖析起始流、终止流,并对流的性能做了详尽的阐述:最后,介绍默认方法的含义及其对于API演化的重要意义。本书不仅介绍Java lambda表达式的基础知识,还深入讲解了构成lamnbda表达式的重要组件,并对其适用场景进行了广泛的说明。