「这是我参与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的函数式接口,这个也是最后一个了,希望对大家能有一点点的帮助。