Java8-特性
Interface接口:
接口的设计目的面向接口编程,封装方法提高可扩展性。
在JDK1.8之后接口中允许定义以default关键字定义的默认方法、static修饰的静态方法和抽象方法。
default修饰的默认方法可以被调用或者重写因为其属于实例方法,在调用时必须实现接口,如果有定义相同签名的方法必须进行重写。
static修饰的静态方法,不能被继承只能用interface接口名称调用。
Lambda表达式:
本质是匿名函数,用于把函数作为参数传入方法中,使得代码更加整齐简短。
代码中的语法格式为:1.(A)->B 2.(A)->{B;}
函数式接口 Functional Interface:
在这种接口中只有一个抽象方法。(如果有多个抽象方法则在实现该接口时无法识别究竟要重写哪个抽象方法)
内置函数式接口 Built-in Functional Interfaces:
Predicate接口是返回值为布尔类型的断言型接口。(and,or,negate)
Function
接口接受一个参数并生成结果。(compose,andThen)
Comparator接口是比较器接口用于比较元素值的大小
Stream流:
分为中间操作或者最终操作,最终操作返回一特定类型的计算结果,而中间操作返回Stream本身,可以连续完成多个操作。
Filter过滤:
中间操作
Sorted排序:
中间操作
Map映射:
中间操作
Match匹配:
最终操作 返回值类型为boolean类型的值
Count计数:
最终操作 返回值类型是long
Collect收集:
最终操作 返回值类型是集合或字符串
Statistics统计:
最终操作 返回值类型是XXXConsumer
Parallel Streams并行流:
Stream有串行和并行两种,串行Stream上的操作是在一个线程中依次保存完成的,而并行Stream则是在多个线程上同时执行的。
函数式接口的总结:
1.Predicate、Function、Consumer、Comparator;
2.通过链式编程,使得它可以方便地对数据进行链式处理;
3.方法参数都是函数式接口类型;
4.一个Stream只能操作一次,操作完就关闭了,继续使用这个Stream会报错;
5.Stream不保存数据,不改变数据。