穿插说一下,java8中关于接口修改了某些要求,比如接口可以实现某些方法的代码,但是同时要求声明方法为default
-
Consumer接口
Consumer用来做什么?
Consumer接收单个参数,并且没有返回值,主要是通过函数来执行一些带有副作用(设置属性)的操作.方法:
// 接收某个对象之后执行操作
void accept(T t);
// 先执行当前的accept,再执行after的accept
default Consumer<T> andThen(Consumer<? super T> after)
-
Predicate接口
- Predicate用来做什么?
判断输入的对象是否满足某个条件 - 方法:
// 判断输入对象是否满足设定的判断条件
boolean test(T t);
// 返回两个判断条件相与后的判断条件
default Predicate<T> and(Predicate<? super T> other)
// 返回判断条件的否定式
default Predicate<T> negate()
// 返回两个判断条件相或后的判断条件
default Predicate<T> or(Predicate<? super T> other)
static <T> Predicate<T> isEqual(Object targetRef)
- Predicate用来做什么?
-
Function接口
- Function用来做什么?
Funcion接口通过构造一个输入函数,输出函数的对象,来实现一个在内部计算函数的过程的接口. - 方法:
// 给定输入参数,通过Function对象计算输出值
R apply(T t)
// 先执行当前funtion对象的apply方法,再执行after对象的apply方法
default <V> Function<Integer, V> andThen(Function<? super Integer, ? extends V> after)
// 先执行before对象的apply方法,再执行当前对象的apply方法
public <V> Function<V, Integer> compose(Function<? super V, ? extends Integer> before)
// 返回一个只会返回输入参数的function对象
static <T> Function<T, T> identity()
- Function用来做什么?
- 为什么会出现function包?
function包是java的函数式编程相关接口,主要提供了不修改内部状态,只用来计算或执行一些操作的方法,所以function包能较好地解决多线程之间的锁及并发存在的一些问题.