顾名思义,函数。类似中学的方程;y= f(x); 超级抽象的一个接口:
一个入参(x),一个返回结果y;结果的产生有个函数方法(apply)
public interface Function<T, R> {
R apply(T t);
}
都是泛型。。。。
- 如果 入参 和 返回结果一样
static <T> Function<T, T> identity() {
return t -> t;
}
-
如果入参也是一个函数
先应用入参: before.apply(v),再应用当前:this.apply(...)
default <V> Function<V, R> compose(Function<? super V, ? extends T> before) {
Objects.requireNonNull(before);
return (V v) -> apply(before.apply(v));
}
和上面顺序相反:: 先应用当前this.apply(...)再应用入参 after.apply(v)
default <V> Function<T, V> andThen(Function<? super R, ? extends V> after) {
Objects.requireNonNull(after);
return (T t) -> after.apply(apply(t));
}
数学上的例子: y=x*f(x);
深入学习
函数编程语言最重要的基础是λ演算(lambda calculus),而且λ演算的函数可以接受函数当作输入(参数)和输出(返回值)