JAVA8新特性之Function和BiFunction简明解析

259 阅读1分钟

:::💡 java8新特性-函数式接口 :::

Fuction 接口

函数式接口

核心方法

apply() 方法

传递一种行为,在使用的时候定义一段行为和传入的参数具体值,个人理解下来是匿名方法的一种增强,提高了可阅读性

示例代码:

  @Test
    void printAnswer() {
        System.out.println(submit(3, v -> v + v));
        System.out.println(printMyInput("Hello", s -> s + " World!"));
    }

    int submit(int a, Function<Integer, Integer> function) {
        return function.apply(a);
    }

    String printMyInput(Object s, Function<Object, String> function) {
        return function.apply(s);
    }

compose()

这个方法接收一个function作为参数,将参数function执行的结果作为参数给调用的function,以此来实现两个function组合的功能。 举个例子 : F(x).compose(g(x))=F(g(x))

示例代码:

    @Test
    void printAnswer() {
        //32
        System.out.println(submit(4, v -> v + v, v1 -> v1 * v1));
    }

    int submit(int a, Function<Integer, Integer> f1, Function<Integer, Integer> f2) {
      Function<Integer, Integer> f = f1.compose(f2);
        return (int) f.apply(a);
    }

andThen()

andThen方法也是接收一个function作为参数,与compse不同的是,先执行本身的apply方法,将执行的结果作为参数给参数中的function。 F(x).andThen(G(x))=G(F(x))

示例代码:

   @Test
    void printAnswer() {
       //64
        System.out.println(submit(4, v -> v + v, v1 -> v1 * v1));
    }

    int submit(int a, Function<Integer, Integer> f1, Function<Integer, Integer> f2) {
        Function<Integer, Integer> f = f1.andThen(f2);
        return f.apply(a);
    }

BiFuction 接口

Fuction可以传一个形参,BiFuction可以传俩

核心方法

apply()

示例代码:

   @Test
    void printAnswer() {
        System.out.println(submit(1, 2, (a, b) -> a + b));
    }
    int submit(int a, int b, BiFunction<Integer, Integer, Integer> function) {
        return function.apply(a, b);
    }