一、新特性
jdk1.8接口内容新增
1)静态方法
跟随接口名使用
2)默认方法:显示通过default修饰的方法
可以在实现类中重写
跟随实现类对象调用
jdk1.9新增
私有方法:被ptivate修饰
只能在接口中被默认方法调用
不能被外部类中使用
二、Stream
Stream流:jdk1.8的重点新特性
IO流:关注数据的存传输
数组|集合:关注数据的存储
Stream流:关注数据的运算
将由数据源产生的元素序列进行流式运算
使用步骤:
1.获取创建Stream流
2.一系列流式中间操作
3.终止行为
特点:
1.Stream本身不存储数据
2.Stream的运算不影响数据源
3.所有中间操作都返回持有结果的新的流
4.流是一次性的流,一旦已经使用就被破坏,无法重复使用多次
5.延迟执行|惰性加载:当获取终止行为的时候所有的中间操作才会执行
获取Stream的方式:
1.Collection-->stream()
2.Arrays.stream()
3.Stream.of(...)
Stream中间操作:
1.过滤 <T> filteer(Predicate<? super T> predicate) 返回由与给定谓词匹配的次流的元素组成的流
2.截取 Stream<T> limit(long maxSize) 返回由该流的元素组成的流,长度被截断为不超过maxSize
3.跳过 Stream<T> skip(long n) 在丢弃流的前n元素后,返回由该流的剩余元素组成的流
4.去重 Stream<T> distinct() 返回由该流的不同元素(根据Object.equals(Object))组成的流
equals与hashCode方法,需要根据内容重写
5.排序 Stream<T> sorted() 返回由该流的元素组成的流,按自然顺序排序
Stream<T> sorted(Comparator<? super T> comparator) 返回由该流的元素组成的流,根据提供
的Comparator排序
三、函数式接口
java.util.function下的函数式接口
四大内置函数接口:
1.消费型接口
Consumer<T>
void accept(T t)
2.函数式接口
Function<T,R>
R apply(T t)
3.断言型接口
Predicate<T>
boolean test(T t)
4.供给型接口
Supplier<T>
T get()
四、方法引用 : 理解
Lambda表达式:将行为作为参数传递-->函数式编程
如果形参|引用为函数式接口类型,实参|赋值就可以为Lambda表达式
方法引用是用来简化Lambda表达式的
是Lambda表达式的另外一种表现形式
简化条件要求:必须满足以下两条件
1.当lambda体{}中的实现就是通过调用另外一个方法来实现的,可以考虑是否可以通过方法引用简化
-
a)当lambda参数列表,返回值与内部引用方法的参数列表与返回值保持一致的时候--->对象 : : 成员方
-
法|类名 : : 静态方法
b)内部所引用方法的返回值与lambda表达式的返回值一致,lambda参数列表的第一个参数作为调用方
法内部的对象,lambda参数列表的第二个参数开始匹配内部引用方法参数列表---->类名 : : 成员方法