JDK8函数式接口之BiFunction

3,485 阅读2分钟

「这是我参与2022首次更文挑战的第15天,活动详情查看:2022首次更文挑战

写在前面

JDK8 API提供了很多函数式接口,这些函数式接口可以被抽象成一个具体的方法,并且使其使用在Lambda表达式中,今天我们要来说的就是其中的BiFunction函数接口。

JDK8函数式接口之BiFunction

今天我们来说一下函数接口BiFunction,并且学习一下这个函数接口是如何使用的,下面就来一一看看吧。

首先我们先来看一下BiFunction源码,如下:

@FunctionalInterface
public interface BiFunction<T, U, R> {

    R apply(T t, U u);

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

由BiFunction的源码,我们可以看得出来,其中内置实现了apply执行方法,和一个默认方法andThen方法。

其实从我前面的一些文章中,也可以看得出来,很多函数式接口,基本上都是实现了apply方法,和andThen方法,其实用法也差不多。

实际用法差不多,虽然可能很熟悉了,但是还是要通过实例来看一下。

public static void main(String[] args) {
    BiFunction<String, String, Integer> length = (s1, s2) -> s1.length() + s2.length();
    Integer length = length.apply("test", "test1");
    System.out.println(length);
}

通过上述代码,我们可以获得下面的结果。

9

这个方法的意思就是计算两个字符串的长度,并且返回一个数值。

至于andThen的用法呢,其实也和其他的函数接口差不多,下面来看一下代码示例:

public static void main(String[] args) {
    BiFunction<String, String, Integer> length1 = (s1, s2) -> s1.length() + s2.length();
    Integer length = length1.andThen(s1 -> s1 * 2).apply("test", "test1");
    System.out.println(length);
}

通过上述代码,我们可以获得下面的结果。

18

就这个结果而言,就是执行完apply方法后,随后再次执行了andThen方法,所以我们在9的结果基础之上,得到了18的结果。

总结

今天我们来学习了BiFunction函数接口,随着最近学习的JDK8的函数式接口,这个也是最后一个了,希望对大家能有一点点的帮助。