Java Operator接口
在Java的函数式编程世界中,Operator
接口是一类特殊的函数式接口,它接收一个或多个输入并返回相同类型的结果。这些接口在Java 8中作为java.util.function
包的一部分被引入,为我们提供了更简洁、更函数化的编程方式。
Operator接口概述
Operator
接口本质上是Function
接口的特例,其中输入参数和输出结果的类型相同。Java提供了两种主要的Operator接口:
UnaryOperator<T>
- 接收一个类型为T的参数,并返回相同类型的结果BinaryOperator<T>
- 接收两个类型为T的参数,并返回相同类型的结果
这些接口非常适用于那些需要对同类型对象进行转换或组合的场景。
UnaryOperator接口
基本概念
UnaryOperator<T>
接口继承自Function<T, T>
接口,它表示一个操作,该操作接收一个参数并产生与输入相同类型的结果。
语法结构
@FunctionalInterface
public interface UnaryOperator<T> extends Function<T, T> {
static <T> UnaryOperator<T> identity() {
return t -> t;
}
}
核心方法
T apply(T t)
- 对给定的参数执行操作
实际例子
让我们看一些UnaryOperator
的实际应用:
import java.util.ArrayList;
import java.util.List;
import java.util.function.UnaryOperator;
public class UnaryOperatorExample {
public static void main(String[] args) {
// 示例1: 将字符串转换为大写
UnaryOperator<String> toUpperCase = str -> str.toUpperCase();
System.out.println(toUpperCase.apply("hello")); // 输出: HELLO
// 示例2: 数字平方
UnaryOperator<Integer> square = n -> n * n;
System.out.println(square.apply(5)); // 输出: 25
// 示例3: 在List中应用UnaryOperator
List<String> names = new ArrayList<>();
names.add("alice");
names.add("bob");
names.add("charlie");
names.replaceAll(String::toUpperCase);
System.out.println(names); // 输出: [ALICE, BOB, CHARLIE]
}
}
identity()
方法
UnaryOperator
接口提供了一个静态方法identity()
,它返回一个恒等函数(即返回输入参数本身):
UnaryOperator<String> identity = UnaryOperator.identity();
System.out.println(identity.apply("test")); // 输出: test
BinaryOperator接口
基本概念
BinaryOperator<T>
接口继承自BiFunction<T, T, T>
,表示一个操作,该操作接收两个相同类型的操作数,并产生与操作数相同类型的结果。
语法结构
@FunctionalInterface
public interface BinaryOperator<T> extends BiFunction<T, T, T> {
static <T> BinaryOperator<T> minBy(Comparator<? super T> comparator) {
// implementation
}
static <T> BinaryOperator<T> maxBy(Comparator<? super T> comparator) {
// implementation
}
}