Function详解

作者: felayman | 来源:发表于2017-10-11 16:01 被阅读302次

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

@FunctionalInterface
public interface Function<T, R> {

    R apply(T t);

    default <V> Function<V, R> compose(Function<? super V, ? extends T> before) {
        Objects.requireNonNull(before);
        return (V v) -> apply(before.apply(v));
    }

    default <V> Function<T, V> andThen(Function<? super R, ? extends V> after) {
        Objects.requireNonNull(after);
        return (T t) -> after.apply(apply(t));
    }

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

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

其核心方法如下:

  • R apply(T t);

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

  • default <V> Function<V, R> compose(Function<? super V, ? extends T> before)

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

  • default <V> Function<T, V> andThen(Function<? super R, ? extends V> after)

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

  • static <T> Function<T, T> identity()

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

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

identity()

 class Person{}
  Function<Object, Object> 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<Integer,Integer> 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<Integer,Integer> 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<T, U, R>

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

  • DoubleFunction<R>

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

  • IntFunction<R>

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

  • LongFunction<R>

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

  • LongToIntFunction

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

  • LongToDoubleFunction

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

  • ToDoubleBiFunction<T, U>

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

  • ToDoubleFunction<T>

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

  • ToIntBiFunction<T, U>

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

  • ToIntFunction<T>

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

  • ToLongBiFunction<T, U>

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

  • ToLongFunction<T>

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

相关文章

  • Function详解

    java.util.function中 Function, Supplier, Consumer, Predica...

  • function详解

    1、函数的基础操作 函数指实现某一个功能的方法,也叫子程序,OOP中的方法JS中函数有两部分:创建函数和执行函数创...

  • js function详解

    引用 一篇相当不错的js function详解 读了一定有收获

  • JavaScript函数_03详解Function.protot

    详解Function.prototype Boy构造函数01 本身也是一个对象,它的构造函数是Function,0...

  • jQuery原理(附带部分new的原理)

    文章 jQuery诞生记-原理与机制 读后感 要点总结: 关于new: (原文出处:详解new function(...

  • 刺破vue的心脏之——响应式源码分析

    之前发刺破 vue 的心脏之——详解 render function code的时候,承诺过会对 Vue 的核心过...

  • 廖雪峰JS小记

    (function(){})() 原型,原型链 浅谈Js原型的理解JS 原型与原型链终极详解 对象 对象:一种无序...

  • 【JS第15期】Function 详解

    函数实际上是一个对象。每个函数都是Function 实例,而且都与其他引用类型一样具有属性和方法。由于函数也是对象...

  • 【JS第15期】Function 详解

    函数实际上是一个对象。每个函数都是Function 实例,而且都与其他引用类型一样具有属性和方法。由于函数也是对象...

  • JavaScript引用类型Function实例详解

    Function类型 函数是对象,函数名是指针:每个函数都是Function类型的实例。由于函数是对象,因此函数名...

网友评论

    本文标题:Function详解

    本文链接:https://www.haomeiwen.com/subject/dzywyxtx.html