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


相关文章
|
4月前
|
开发框架 Java 关系型数据库
在Linux系统中安装JDK、Tomcat、MySQL以及部署J2EE后端接口
校验时,浏览器输入:http://[your_server_IP]:8080/myapp。如果你看到你的应用的欢迎页面,恭喜你,一切都已就绪。
391 17
|
4月前
|
Java 关系型数据库 MySQL
在Linux操作系统上设置JDK、Tomcat、MySQL以及J2EE后端接口的部署步骤
让我们总结一下,给你的Linux操作系统装备上最强的军队,需要先后装备好JDK的弓箭,布置好Tomcat的阵地,再把MySQL的物资原料准备好,最后部署好J2EE攻城车,那就准备好进军吧,你的Linux军团,无人可挡!
117 18
|
4月前
|
开发框架 关系型数据库 Java
Linux操作系统中JDK、Tomcat、MySQL的完整安装流程以及J2EE后端接口的部署
然后Tomcat会自动将其解压成一个名为ROOT的文件夹。重启Tomcat,让新“植物”适应新环境。访问http://localhost:8080/yourproject看到你的项目页面,说明“植物”种植成功。
132 10
|
11月前
|
Java
让星星⭐月亮告诉你,jdk1.8 Java函数式编程示例:Lambda函数/方法引用/4种内建函数式接口(功能性-/消费型/供给型/断言型)
本示例展示了Java中函数式接口的使用,包括自定义和内置的函数式接口。通过方法引用,实现对字符串操作如转换大写、数值转换等,并演示了Function、Consumer、Supplier及Predicate四种主要内置函数式接口的应用。
95 1
|
Oracle 安全 Java
JDK8到JDK28版本升级的新特性问题之在Java 15及以后的版本中,密封类和密封接口是怎么工作的
JDK8到JDK28版本升级的新特性问题之在Java 15及以后的版本中,密封类和密封接口是怎么工作的
|
Java Maven 容器
JDK版本特性问题之想使用接口中的私有方法,如何实现
JDK版本特性问题之想使用接口中的私有方法,如何实现
JDK版本特性问题之想使用接口中的私有方法,如何实现
|
编解码 安全 Java
jdk8新特性-接口和日期处理
jdk8新特性-接口和日期处理
|
Java
JavaSE——JDk8新特性(1/2):Lambda表达式(具体实现、函数式接口、简化setAll、Comparator),Lambda表达式的省略写法
JavaSE——JDk8新特性(1/2):Lambda表达式(具体实现、函数式接口、简化setAll、Comparator),Lambda表达式的省略写法
113 1
【JAVA进阶篇教学】第四篇:JDK8中函数式接口
【JAVA进阶篇教学】第四篇:JDK8中函数式接口
JDK 1.8 函数接口(收藏用)
JDK 1.8 函数接口(收藏用)
107 0