JDK8函数式接口之BinaryOperator

简介: JDK8函数式接口之BinaryOperator

写在前面


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));
}


执行结果如下:

image.png


从上面的执行结果来看,我们可以取出两个数值中最大的一个。


当然了,除了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函数接口,大家有什么收获吗?


相关文章
|
5月前
|
API
JDK8函数式接口之BiConsumer
JDK8函数式接口之BiConsumer
64 0
|
2天前
|
Java
【JAVA进阶篇教学】第四篇:JDK8中函数式接口
【JAVA进阶篇教学】第四篇:JDK8中函数式接口
|
3月前
|
Java 开发者
JDK 9新特性探秘:接口中的私有方法
本文旨在探讨Java Development Kit 9(JDK 9)为Java接口引入的新特性——私有方法。在JDK 9之前,接口只能包含公共的抽象方法和常量。然而,随着Java的不断发展,接口中需要更加灵活的方式来处理复杂性和代码重用。因此,JDK 9引入了私有方法,允许开发者在接口内部定义私有方法和私有静态方法,从而提高了代码的模块性和可维护性。本文将详细介绍这一新特性的使用方法、应用场景及其对Java编程的影响。
|
3月前
|
Java 开发者
JDK 8:函数式接口的新篇章
JDK 8引入了函数式接口,这一新特性为Java开发者带来了巨大的便利。本文将深入探讨函数式接口的原理、优势以及如何在实际开发中应用这一特性。
|
4月前
|
存储 Java 关系型数据库
JDK8中的新特性(Lambda、函数式接口、方法引用、Stream)(二)
JDK8中的新特性(Lambda、函数式接口、方法引用、Stream)(二)
|
4月前
|
JavaScript 前端开发 Java
JDK8中的新特性(Lambda、函数式接口、方法引用、Stream)(一)
JDK8中的新特性(Lambda、函数式接口、方法引用、Stream)(一)
|
4月前
|
Java
重学JDK8新特性之Lambda、函数式接口、接口新增方法、方法引用
重学JDK8新特性之Lambda、函数式接口、接口新增方法、方法引用
39 0
|
5月前
|
API
JDK8函数式接口之BiPredicate
JDK8函数式接口之BiPredicate
37 0
|
2天前
|
IDE Java Shell
02|手把手教你安装JDK与配置主流IDE
02|手把手教你安装JDK与配置主流IDE
6 0
|
4天前
|
Java Shell 开发者
都2024年了!你还不知道在Docker中安装jdk?
都2024年了!你还不知道在Docker中安装jdk?