写在前面
JDK8 API提供了很多函数式接口,这些函数式接口可以被抽象成一个具体的方法,并且使其使用在Lambda表达式中,今天我们要来说的就是其中的BinaryOperator函数接口。
JDK8函数式接口之BinaryOperator
上篇我们说到了UnaryOperator函数接口,了解了一部分的运算函数,今天我们要说的这个BinaryOperator和UnaryOperator函数接口不同,先来看一下源码。
@FunctionalInterface public interface BinaryOperator<T> extends BiFunction<T,T,T> { public static <T> BinaryOperator<T> minBy(Comparator<? super T> comparator) { Objects.requireNonNull(comparator); return (a, b) -> comparator.compare(a, b) <= 0 ? a : b; } public static <T> BinaryOperator<T> maxBy(Comparator<? super T> comparator) { Objects.requireNonNull(comparator); return (a, b) -> comparator.compare(a, b) >= 0 ? a : b; } }
从BinaryOperator函数接口的源码来看,此接口继承于BiFunction<T,T,T>接口。
这里的BiFunction函数接口咱们还没有学习到,之后的文章中会有所体现的。
此接口自定义了两个接口方法,分别是minBy,maxBy两个方法。
因为继承于BiFunction函数接口类,所以BinaryOperator接口类也存在两个方法,一个是apply方法,另外一个是andThen方法。
直接来看一下代码使用示例吧。
public static void main(String[] args) { Function<Integer, Integer> function = x -> x + 1; System.out.println(BinaryOperator.maxBy(Comparator.comparing(function)).apply(1, 2)); }
执行结果如下:
从上面的执行结果来看,我们可以取出两个数值中最大的一个。
当然了,除了maxBy,还有一个minBy方法可以供我们使用。
public static void main(String[] args) { Function<Integer, Integer> function = x -> x + 1; System.out.println(BinaryOperator.minBy(Comparator.comparing(function)).apply(1, 2)); }
结果就不用说了,绝对是返回的1呀。
由此我们可以看出来,minBy和maxBy方法是先将值传入到function对象中,随后根据function接口方法中的值进行对比后,随后返回最大或者最小的一个值。
这里的返回的值是初始值,并不是计算后的值哈。
总结
今天学习了BinaryOperator函数接口,大家有什么收获吗?