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