Java8 教程

Java8 内置函数式接口 BinaryOperator

Java8 中,BinaryOperator<T> 是一个函数式接口,代表了一个接受两个相同类型参数并返回结果的操作。它接受两个类型为 T 的参数,并返回一个相同类型的结果。

该函数式接口定义了一个名为 apply 的抽象方法,该方法接受两个参数并返回一个结果。在函数式编程中,可以使用该接口来表示二元操作,例如对两个值进行相加、相乘、比较等操作。

BinaryOperator<T> 接口通常用于需要对两个值进行操作并返回结果的场景,例如在集合中对两个元素进行合并、比较等操作。

该接口是 java.util.function 包中的一部分,它提供了一系列用于函数式编程的函数式接口,可以方便地进行函数式编程的操作。在实际的开发中,可以使用 BinaryOperator<T> 来简化代码,提高可读性和可维护性。

BinaryOperator 定义

BinaryOperator 函数式接口定义如下:

package java.util.function;

import java.util.Objects;
import java.util.Comparator;

/**
* 表示对两个相同类型的操作数进行操作,产生与操作数相同类型的结果。
* 这是 BiFunction 的特例,用于操作数和结果都是同一类型的情况。
* 这是一个功能接口,其功能方法是 apply(Object, Object)。
*
* @see BiFunction
* @see UnaryOperator
* @since 1.8
*/
@FunctionalInterface
public interface BinaryOperator<T> extends BiFunction<T,T,T> {

   /**
    * 返回一个 BinaryOperator,根据指定的Comparator返回两个元素中较小的一个。
    *
    * @param <T> 比较器输入参数的类型
    * @param comparator 用于比较两个值的比较器
    * @return 一个 BinaryOperator,根据提供的 Comparator 返回其操作数中较小的那个
    * @throws NullPointerException 如果参数为空
    */
   public static <T> BinaryOperator<T> minBy(Comparator<? super T> comparator) {
       Objects.requireNonNull(comparator);
       return (a, b) -> comparator.compare(a, b) <= 0 ? a : b;
   }

   /**
    * 返回一个BinaryOperator,根据指定的Comparator返回两个元素中较大的一个。
    *
    * @param <T> 比较器输入参数的类型
    * @param comparator 用于比较两个值的比较器
    * @return 一个 BinaryOperator,根据提供的Comparator返回操作数中较大的那个
    * @throws NullPointerException 如果参数为空
    */
   public static <T> BinaryOperator<T> maxBy(Comparator<? super T> comparator) {
       Objects.requireNonNull(comparator);
       return (a, b) -> comparator.compare(a, b) >= 0 ? a : b;
   }
}

BinaryOperator 示例

BinaryOperator 简单示例

该实例将输入的两个字符串简单连接,然后返回。

匿名类实现方式

package com.hxstrive.jdk8.function_interface;

import java.util.function.BinaryOperator;

/**
* BinaryOperator 函数式接口
* @author hxstrive.com
*/
public class BinaryOperatorDemo {

   public static void main(String[] args) {
       BinaryOperator<String> binaryOperator = new BinaryOperator<String>() {
           @Override
           public String apply(String s, String s2) {
               return s2 + " " + s;
           }
       };
       System.out.println(binaryOperator.apply("hello", "world"));
   }

}

运行示例,输出如下:

world hello

Lambda实现方式

package com.hxstrive.jdk8.function_interface;
import java.util.function.BinaryOperator;
/**
 * BinaryOperator 函数式接口
 * @author hxstrive.com
 */
public class BinaryOperatorDemo2 {
    public static void main(String[] args) {
        BinaryOperator<String> binaryOperator = (s1, s2) -> {
            return s2 + " " + s1;
        };
        System.out.println(binaryOperator.apply("hello", "world"));
    }
}

运行示例,输出如下:

world hello

BinaryOperator minBy 和 maxBy 示例

下面示例将演示 minBy 和 maxBy 方法的用法,用来分别获取最小值和最大值,如下:

package com.hxstrive.jdk8.function_interface;
import java.util.function.BinaryOperator;
/**
 * BinaryOperator 函数式接口
 * @author hxstrive.com
 */
public class BinaryOperatorDemo3 {
    public static void main(String[] args) {
        // 获取最小值
        BinaryOperator<Integer> minBy = BinaryOperator.minBy((a, b) -> {
            return a - b;
        });
        System.out.println("minBy=" + minBy.apply(10, 5));
        // 获取最大值
        BinaryOperator<Integer> maxBy = BinaryOperator.maxBy((a, b) -> {
            return a - b;
        });
        System.out.println("maxBy=" + maxBy.apply(10, 5));
    }
}

运行示例,输出如下:

minBy=5
maxBy=10
说说我的看法
全部评论(
没有评论
关于
本网站属于个人的非赢利性网站,转载的文章遵循原作者的版权声明,如果原文没有版权声明,请来信告知:hxstrive@outlook.com
公众号