概述
Function也是函数式接口,funcation的中文意思是【方法,函数】,我们都知道在数学中函数就是有进有出。该接口也是,作为函数式接口也是有且只有一个抽象方法。该抽象方法接收一个泛型参数,返回一个泛型数据。
接口详情
1. apply
该抽象方法是接收一个参数,然后参数通过函数计算,返回一个结果数据。
/**
* 通过给定参数应用函数
*
* @param t 函数的入口参数
* @return 函数的结果
*/
R apply(T t);
2. compose
这个方法可以生成一个组合函数,参数也是一个函数,只不过,参数函数的结果是作为当前函数的输入。
/**
* 返回的是一个组合函数,该函数是参数函数的计算结果作为当前函数的输入进行计算。
* 任何一个函数在计算中发生异常都会将异常转发给调用者。
*
* @param <V> 参数函数,作为当前组合函数的输入参数。
* @return 组合函数。
* @throws 如果参数函数为null抛出空指针异常
*
* @see #andThen(Function)
*/
default <V> Function<V, R> compose(Function<? super V, ? extends T> before) {
Objects.requireNonNull(before);
return (V v) -> apply(before.apply(v));
}
3. andThen
这个方法和上面的函数正好相反,这个也是组合函数,只不过,这个是将当前函数的结果作为参数函数的输入。
/**
* 返回的是一个组合函数,该函数时将当前函数的结果作为参数函数的输入进行计算的。
* 任何一个函数在计算中发生异常都会将异常转发给调用者。
*
* @param <V> 参数函数,
* @return 一个和函数
* @throws 参数函数为null抛出空指针异常
*
* @see #compose(Function)
*/
default <V> Function<T, V> andThen(Function<? super R, ? extends V> after) {
Objects.requireNonNull(after);
return (T t) -> after.apply(apply(t));
}
4. identity
我觉得这个静态方法时没有什么太大的作用,因为这个静态方法生成的函数应用执行结果就是输入的参数。
/**
* 返回一个函数,该函数的结果就是参数。
*
* @return 一个总是返回参数的函数
*/
static <T> Function<T, T> identity() {
return t -> t;
}