函数式编 Function<T, R>

246 阅读1分钟

顾名思义,函数。类似中学的方程;y= f(x); 超级抽象的一个接口:

一个入参(x),一个返回结果y;结果的产生有个函数方法(apply)

public interface Function<T, R> {

    R apply(T t);
}

都是泛型。。。。

  1. 如果 入参 和 返回结果一样
 static <T> Function<T, T> identity() {
        return t -> t;
    }
  1. 如果入参也是一个函数

    先应用入参: 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),而且λ演算的函数可以接受函数当作输入(参数)和输出(返回值)

函数式编程的核心思想-廖雪峰

你真的理解【函数式编程】