1.Lambda
2.增加时间工具类
LocalDate/LocalTime 和 LocalDateTime
几乎所有的时间对象都实现了 Temporal 接口,所以接口参数一般都是 Temporal
Instant: 表示时间线上的一个点,参考点是标准的Java纪元(epoch),即1970-01-01T00:00: 00Z(1970年1月1日00:00 GMT)
LocalDate: 日期值对象如 2019-09-22
LocalTime:时间值对象如 21:25:36
LocalDateTime:日期+时间值对象
ZoneId:时区
ZonedDateTime:日期+时间+时区值对象
DateTimeFormatter:用于日期时间的格式化
Period:用于计算日期间隔
Duration:用于计算时间间隔
TemporalAdjusters:
2.注解增强
可以进行重复注解
注解本身必须使用@Repeatable
扩展注解的支持
Java 8扩展了注解的上下文。现在几乎可以为任何东西添加注解:局部变量、泛型类、父类与接口的实现,就连方法的异常也能添加注解。
3.接口增强
接口新增默认方法与静态方法
interface Demo{
default int test(){
return 0;
}
static void demo(){}
}
Demo的方法test()实现类不必实现,对象可直接访问,静态方法可由接口直接调用,如Demo.demo()
4.流式处理
新增Stream
特性:
1.Stream流不是一种数据结构,不保存数据,它只是在原数据集上定义了一组操作。
2.这些操作是惰性的,即每当访问到流中的一个元素,才会在此元素上执行这一系列操作。
3.Stream不保存数据,故每个Stream流只能使用一次。
两个概念:流、管道。元素流在管道中经过中间操作的处理,最后由最终操作得到前面处理的结果。这里有2个操作:中间操作、最终操作。
中间操作:返回结果都是Stream,故可以多个中间操作叠加。
终止操作:用于返回我们最终需要的数据,只能有一个终止操作。
流的生成方法
1.Collection接口的stream()或parallelStream()方法
2.静态的Stream.of()、Stream.empty()方法
3.Arrays.stream(array, from, to)
4.静态的Stream.generate()方法生成无限流,接受一个不包含引元的函数
5.静态的Stream.iterate()方法生成无限流,接受一个种子值以及一个迭代函数
6.Pattern接口的splitAsStream(input)方法
7.静态的Files.lines(path)、Files.lines(path, charSet)方法
8.静态的Stream.concat()方法将两个流连接起来
中间操作:
1.filter(Predicate) :将结果为false的元素过滤掉
2.map(fun) :转换元素的值,可以用方法引元或者lambda表达式
3.flatMap(fun) :若元素是流,将流摊平为正常元素,再进行元素转换
4.limit(n) :保留前n个元素
5.skip(n) :跳过前n个元素
6.distinct() :剔除重复元素
7.sorted() :将Comparable元素的流排序
8.sorted(Comparator) :将流元素按Comparator排序
9.peek(fun) :流不变,但会把每个元素传入fun执行,可以用作调试
终结操作:
a、约简操作
1.reduce(fun) :从流中计算某个值,接受一个二元函数作为累积器,从前两个元素开始持续应用它,累积器的中间结果作为第一个参数,流元素作为第二个参数
2.reduce(a, fun) :a为幺元值,作为累积器的起点
3.reduce(a, fun1, fun2) :与二元变形类似,并发操作中,当累积器的第一个参数与第二个参数都为流元素类型时,可以对各个中间结果也应用累积器进行合并,但是当累积器的第一个参数不是流元素类型而是类型T的时候,各个中间结果也为类型T,需要fun2来将各个中间结果进行合并
b、收集操作:
1.iterator():
2.forEach(fun):
3.forEachOrdered(fun) :可以应用在并行流上以保持元素顺序
4.toArray():
5.toArray(T[] :: new) :返回正确的元素类型
6.collect(Collector):
7.collect(fun1, fun2, fun3) :fun1转换流元素;fun2为累积器,将fun1的转换结果累积起来;fun3为组合器,将并行处理过程中累积器的各个结果组合起来
查找与收集操作
1.max(Comparator):返回流中最大值
2.min(Comparator):返回流中最小值
3.count():返回流中元素个数
4.findFirst() :返回第一个元素
5.findAny() :返回任意元素
6.anyMatch(Predicate) :任意元素匹配时返回true
7.allMatch(Predicate) :所有元素匹配时返回true
8.noneMatch(Predicate) :没有元素匹配时返回true
5.引入Optional
Optional为一个容器,可缓解经常遇到的空指针问题
6.引入Base64
新增Base64工具类
7、增强方法引用
直接引用已有Java类或对象(实例)的方法或构造器。与lambda联合使用,减少冗余代码
1、构造器引用,它的语法是Class::new,或者更一般的Class< T >::new。请注意构造器没有参数
2、静态方法引用,它的语法是Class::static_method。请注意这个方法接受一个Car类型的参数
3、特定类的任意对象的方法引用,它的语法是Class::method。请注意,这个方法没有参数。
4、特定对象的方法引用,它的语法是instance::method。请注意,这个方法接受一个Car类型的参数
8、并发
atomic包以及其他包中还增加了下面这些类:
- DoubleAccumulator
- DoubleAdder
- LongAccumulator 收集统计数据
- LongAdder LongAccumulator 的一种特例 收集统计数据,高吞吐量,不适合细粒度的同步控制
- CompletableFuture
新增StampedLock用以代替ReadWriteLock
9、引用增强
静态方法引用:ClassName::methodName
实例上的实例方法引用:instanceReference::methodName
超类上的实例方法引用:super::methodName
类型上的实例方法引用:ClassName::methodName
构造方法引用:Class::new
数组构造方法引用:TypeName[]::new