最近意识到对java8的新特性不是很熟悉,所以开始读《Java8实战》,现在把读书笔记整理下.
一些概念
流处理
流是一系列数据项,一次只生成一项。程序可以从输入流中一个一
个读取数据项,然后以同样的方式将数据项写入输出流。一个程序的输出流很可能是另一个程序的输入流。
可以理解为对一个集合(输入流)进行各种拆卸组装,得到你想要的结果(输出流).
用行为参数化把代码传递给方法
有点类似策略模式,把对对象的筛选条件作为对象的属性(这一步叫行为参数化),然后通过传递此对象的方式,把这个对象作为参数传给方法,这样可以实现方法的复用,达到不同行为实现不同目的
新功能
1.2方法引用
Java 8中新增了函数——值的一种新形式。
方法引用::语法(即“把这个方法作为值”)将其传给另一个方法;
还有另一种写法(匿名函数或λ)
1.3流
普通for循环属于外部迭代;Stream流属于内部迭代
Collection主要是为了存储和访问数据,而Stream则主要用于描述对数据的计算。这里的关键点在于,Stream允许并提倡并行处理一个Stream中的元素。
parallelStream方法
1.4默认方法
Java 8的解决方法就是打破最后一环——接口如今可以包含实现类没有提供实现的方法签名了!那谁来实现它呢?缺失的方法主体随接口提供了(因此就有了默认实现),而不是由实现类提供。这就给接口设计者提供了一个扩充接口的方式,而不会破坏现有的代码。Java 8在接口声明中使用新的default关键字来表示这一点。
接口中用default关键字修饰的默认方法,实现类可以不实现.
1.5来自函数式编程的其他好思想
Optional类
在Java 8里有一个Optional类,如果你能一致地使用它的话,就可以帮助你避免出现NullPointer异常。它是一个容器对象,可以包含,也可以不包含一个值。Optional中有方法来明确处理值不存在的情况,这样就可以避免NullPointer异常了。换句话说,它使用类型系统,允许你表明我们知道一
个变量可能会没有值。