Java 8实战之读书笔记二:基础知识
2017-06-11 00:00
288 查看
摘要: 本书第一部分将介绍Java 8的基础知识。学完第一部分, 你将会对Lambda表达式有充分的了解,并可以编写简洁而灵活的代码,能够轻松地适应不断变化的需求。
第1章将总结Java的主要变化( Lambda表达式、方法引用、流和默认方法),并为学习本书做好准备。
在第2章中,你将了解行为参数化,这是Java 8非常依赖的一种软件开发模式,也是引入Lambda表达式的主要原因。
第3章全面地解释了Lambda表达式和方法引用的概念,每一步都有代码示例和测验。
好记性不如烂笔头,整理一些个人觉得比较重要的东西。
和在数据库查询语言中的思路类似——用更高级的方式表达想要的东西,而由“实现”(在这里
是Streams库)来选择最佳低级执行机制。
Java 8中加入Streams可以看作把另外两项扩充加入Java 8的直接原因:
(1).把代码传递给方法的简洁方式(方法引用、 Lambda)
(2).接口中的默认方法。
Java 8也用Stream API(java.util.stream)解决了这两个问题:集合处理时的套路和晦涩,以及难以利用多核。
Collection主要是为了存储和访问数据,而Stream则主要用于描述对数据的计算。
用行为参数化把代码传递给方法:
行为参数化:实现了把方法(你的代码)作为参数传递给另一个方法的能力。
把函数作为一等值。
以下是你应从本章中学到的关键概念。
行为参数化,就是一个方法接受多个不同的行为作为参数,并在内部使用它们, 完成不同行为的能力。
行为参数化可让代码更好地适应不断变化的要求,减轻未来的工作量。
传递代码,就是将新行为作为参数传递给方法。但在Java 8之前这实现起来很啰嗦。为接口声明许多只用一次的实体类而造成的啰嗦代码,在Java 8之前可以用匿名类来减少。
Java API包含很多可以用不同行为进行参数化的方法,包括排序、线程和GUI处理。
函数式接口:只定义了一个抽象方法
@FunctionalInterface:用于表示该接口会设计成一个函数式接口。
复合Lambda表达式的有用方法:
比较器复合:Comparator.comparing
.reversed()逆序,.thenComparing比较器链
谓词复合:negate()非,and,or
函数复合:.andThen(Function fun),.compose(Function fun)两者顺序相反
以下是你应从本章中学到的关键概念。
Lambda表达式可以理解为一种匿名函数:它没有名称,但有参数列表、函数主体、返回类型,可能还有一个可以抛出的异常的列表。
Lambda表达式让你可以简洁地传递代码。
函数式接口就是仅仅声明了一个抽象方法的接口。
只有在接受函数式接口的地方才可以使用Lambda表达式。
Lambda表达式允许你直接内联,为函数式接口的抽象方法提供实现,并且将整个表达式作为函数式接口的一个实例。
Java 8自带一些常用的函数式接口,放在java.util.function包里,包括Predicate<T>、 Function<T,R>、 Supplier<T>、 Consumer<T>和BinaryOperator<T>,如表3-2所述。
为了避免装箱操作,对Predicate<T>和Function<T, R>等通用函数式接口的原始类型
特化: IntPredicate、 IntToLongFunction等。
环绕执行模式(即在方法所必需的代码中间,你需要执行点儿什么操作,比如资源分配和清理)可以配合Lambda提高灵活性和可重用性。
Lambda表达式所需要代表的类型称为目标类型。
方法引用让你重复使用现有的方法实现并直接传递它们。
Comparator、 Predicate和Function等函数式接口都有几个可以用来结合Lambda表达式的默认方法。
第1章将总结Java的主要变化( Lambda表达式、方法引用、流和默认方法),并为学习本书做好准备。
在第2章中,你将了解行为参数化,这是Java 8非常依赖的一种软件开发模式,也是引入Lambda表达式的主要原因。
第3章全面地解释了Lambda表达式和方法引用的概念,每一步都有代码示例和测验。
好记性不如烂笔头,整理一些个人觉得比较重要的东西。
一、基础知识
第1章 为什么要关心Java 8
Java 8提供了一个新的API(称为“流”, Stream),它支持许多处理数据的并行操作,其思路和在数据库查询语言中的思路类似——用更高级的方式表达想要的东西,而由“实现”(在这里
是Streams库)来选择最佳低级执行机制。
Java 8中加入Streams可以看作把另外两项扩充加入Java 8的直接原因:
(1).把代码传递给方法的简洁方式(方法引用、 Lambda)
(2).接口中的默认方法。
Java 8也用Stream API(java.util.stream)解决了这两个问题:集合处理时的套路和晦涩,以及难以利用多核。
Collection主要是为了存储和访问数据,而Stream则主要用于描述对数据的计算。
用行为参数化把代码传递给方法:
行为参数化:实现了把方法(你的代码)作为参数传递给另一个方法的能力。
把函数作为一等值。
第2章 通过行为参数化传递代码
示例:public static boolean isGreenApple(Apple apple) { return "green".equals(apple.getColor()); } //java.util.function中有这个接口 public interface Predicate<T> { boolean test(T t); } static List<Apple> filterApples(List<Apple> inventory, Predicate<Apple> p) { List<Apple> result = new ArrayList<>(); for (Apple apple: inventory){ if (p.test(apple)) { result.add(apple); } } return result; } //使用时: filterApples(inventory, Apple::isGreenApple);
以下是你应从本章中学到的关键概念。
行为参数化,就是一个方法接受多个不同的行为作为参数,并在内部使用它们, 完成不同行为的能力。
行为参数化可让代码更好地适应不断变化的要求,减轻未来的工作量。
传递代码,就是将新行为作为参数传递给方法。但在Java 8之前这实现起来很啰嗦。为接口声明许多只用一次的实体类而造成的啰嗦代码,在Java 8之前可以用匿名类来减少。
Java API包含很多可以用不同行为进行参数化的方法,包括排序、线程和GUI处理。
第3章 Lambda 表达式
函数式接口:只定义了一个抽象方法
@FunctionalInterface:用于表示该接口会设计成一个函数式接口。
//无装箱操作(推荐) IntPredicate evenNumbers = (int i) -> i % 2 == 0; evenNumbers.test(1000); //装箱 Predicate<Integer> oddNumbers = (Integer i) -> i % 2 == 1; oddNumbers.test(1000);
复合Lambda表达式的有用方法:
比较器复合:Comparator.comparing
.reversed()逆序,.thenComparing比较器链
谓词复合:negate()非,and,or
函数复合:.andThen(Function fun),.compose(Function fun)两者顺序相反
以下是你应从本章中学到的关键概念。
Lambda表达式可以理解为一种匿名函数:它没有名称,但有参数列表、函数主体、返回类型,可能还有一个可以抛出的异常的列表。
Lambda表达式让你可以简洁地传递代码。
函数式接口就是仅仅声明了一个抽象方法的接口。
只有在接受函数式接口的地方才可以使用Lambda表达式。
Lambda表达式允许你直接内联,为函数式接口的抽象方法提供实现,并且将整个表达式作为函数式接口的一个实例。
Java 8自带一些常用的函数式接口,放在java.util.function包里,包括Predicate<T>、 Function<T,R>、 Supplier<T>、 Consumer<T>和BinaryOperator<T>,如表3-2所述。
为了避免装箱操作,对Predicate<T>和Function<T, R>等通用函数式接口的原始类型
特化: IntPredicate、 IntToLongFunction等。
环绕执行模式(即在方法所必需的代码中间,你需要执行点儿什么操作,比如资源分配和清理)可以配合Lambda提高灵活性和可重用性。
Lambda表达式所需要代表的类型称为目标类型。
方法引用让你重复使用现有的方法实现并直接传递它们。
Comparator、 Predicate和Function等函数式接口都有几个可以用来结合Lambda表达式的默认方法。
相关文章推荐
- Java 8实战之读书笔记二:基础知识
- 《Spring 3.x 企业应用开发实战》学习笔记 第三章 IoC容器概述 3.2 相关Java基础知识 类装载器 反射机制
- JavaWeb基础知识:Html和Css实战WebView实现手机显示网页
- Java培训实战教程之Java基础知识精华部分(一)(二)(三)
- 【笔记】Java核心技术 卷1 基础知识 第一章 读书笔记
- java反射实战 -- 一些基础知识
- 第一篇:微信公众平台开发实战Java版之了解微信公众平台基础知识以及资料准备
- 第一篇:微信公众平台开发实战Java版之了解微信公众平台基础知识以及资料准备
- Java WEB开发实战 之 第二部分:Web应用基础知识【私塾在线原创】
- Java培训实战教程之Java基础知识精华部分(六)-继承
- java基础知识(读书笔记,练习题笔记)
- Java__线程---基础知识全面实战---坦克大战系列为例
- Java培训实战教程之Java基础知识精华部分(二)
- Java培训实战教程之Java基础知识精华部分(三)
- Java WEB开发实战 之 第一部分:复习必备的基础知识【私塾在线原创】
- 第一篇:微信公众平台开发实战Java版之了解微信公众平台基础知识以及资料准备
- [Java并发编程实战] 基础知识
- Java培训实战教程之Java基础知识精华部分(四)-封装
- Java培训实战教程之Java基础知识精华部分(一)
- Java高手真经_编程基础卷——读书笔记(7)——Eclipse命名小知识