Function详解

java.util.function中 Function, Supplier, Consumer, Predicate和其他函数式接口广泛用在支持lambda表达式的API中。这些接口有一个抽象方法,会被lambda表达式的定义所覆盖。

@FunctionalInterface
public interface Function {

    R apply(T t);

    default  Function compose(Function before) {
        Objects.requireNonNull(before);
        return (V v) -> apply(before.apply(v));
    }

    default  Function andThen(Function after) {
        Objects.requireNonNull(after);
        return (T t) -> after.apply(apply(t));
    }

    static  Function identity() {
        return t -> t;
    }

Function接口的主要作用是将一个给定的对象进行加工,然后返回加工后的对象,这个加工可以是任何操作.

其核心方法如下:

  • R apply(T t);

    将一个给定的对象进行加工,然后返回加工后的对象,可以将该方法理解为一个一维函数,参数R是自变量,参数T是因变量.

  • default Function compose(Function before)

    组合函数,在调用当前function之前执行

  • default Function andThen(Function after)

    组合函数,在调用当前function之后执行

  • static Function identity()

    原函数,返回与参数一致的函数,即可以理解为 y = x.

下面对这些方法进行实例测试:

identity()

 class Person{}
  Function function = Function.identity();
  System.out.println(function.apply(100));
  System.out.println(Function.identity().apply(100111));
  Person person = new Person();
  System.out.println(person == Function.identity().apply(person));

结果为:

100
100111
true

可以看到identity()返回的值与原值是一致的.

andThen()

我们现在用Function.andThen()来实现一个函数:y = 10x + 10;

Function function = x -> x * 10;
function = function.andThen(x -> x+10);
System.out.println(function.apply(8));

结果为:

90

compose()

我们现在用Function.compose()来实现一个函数:y = 10 (10+x) + 10;

Function function = (x -> x * 10);
function = function.compose(x -> x +10);
function = function.andThen(x -> x+10);
System.out.println(function.apply(8));

结果为:

190

与Function接口相关的接口:

  • BiFunction

    二维函数,可以理解成 z = kx + by,即对给定的两个参数U,R进行加工,生产T

  • DoubleFunction

    用于处理处理将其他类型转成double类型数据的Function

  • IntFunction

    用于处理处理将其他类型转成int类型数据的Function

  • LongFunction

    用于处理将其他类型转成long类型数据的Function

  • LongToIntFunction

    用于处理将long转换成int的Function

  • LongToDoubleFunction

    用于处理将long转换成double的Function

  • ToDoubleBiFunction

    用于处理将给定两个参数T,U转换成double类型的BiFunction

  • ToDoubleFunction

    用于处理将其他类型转换成double的Function

  • ToIntBiFunction

    用于处理将给定两个参数T,U转换成int类型的BiFunction

  • ToIntFunction

    用于处理将其他类型转换成int的Function

  • ToLongBiFunction

    用于处理将给定两个参数T,U转换成long类型的BiFunction

  • ToLongFunction

    用于处理将其他类型转换成long的Function

你可能感兴趣的:(Function详解)