Java8 中,BinaryOperator<T> 是一个函数式接口,代表了一个接受两个相同类型参数并返回结果的操作。它接受两个类型为 T 的参数,并返回一个相同类型的结果。
该函数式接口定义了一个名为 apply 的抽象方法,该方法接受两个参数并返回一个结果。在函数式编程中,可以使用该接口来表示二元操作,例如对两个值进行相加、相乘、比较等操作。
BinaryOperator<T> 接口通常用于需要对两个值进行操作并返回结果的场景,例如在集合中对两个元素进行合并、比较等操作。
该接口是 java.util.function 包中的一部分,它提供了一系列用于函数式编程的函数式接口,可以方便地进行函数式编程的操作。在实际的开发中,可以使用 BinaryOperator<T> 来简化代码,提高可读性和可维护性。
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; } }
该实例将输入的两个字符串简单连接,然后返回。
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
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
下面示例将演示 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