【睡JDK】Java函数式编程接口详解之UnaryOperator、BinaryOperator

今天介绍的这两位兄弟大U(Unary:一元的)和大B(Binary:二元的)其实并不是全新的东西,而是两个特例,我们先来康康他们的源码。

UnaryOperator的源码

@FunctionalInterface
public interface UnaryOperator<T> extends Function<T, T> {
    static <T> UnaryOperator<T> identity() {
        return t -> t;
    }
}

BinaryOperator的源码:

@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;
    }
}

从源码可以看出UnaryOperator继承自Function,而且Function的参数和返回值都是同类型T,因此Function的参数和返回值是同类型的时候,我们可以使用UnaryOperator来代替Function。同理,BinaryOperator也是如此,它继承自BiFunction,当返回值和两个参数的类型都相同时,可以使用BinaryOperator来代替BiFunction。这个做也是为了简化开发,JDK只提供了一元和二元的实现。当然,如果你有需求,你也可以自己实现TernaryOperator(三元的)。

Function作为JDK自带的函数编程接口,拥有很有变体,其地位可见一斑,所以小伙伴们一定要多看多思考,JDK给我们是一颗颗大白菜,但是希望各位能在内心种下它们的种子,学会融会贯通,活学活用。

Operator还有一些变体,如下:

接口名 参数 返回类型 描述
IntUnaryOperator int int 参数、返回值都是int类型
DoubleUnaryOperator double double 参数、返回值都是double类型
LongUnaryOperator long long 参数、返回值都是long类型
IntBinaryOperator (int, int) int 两个参数、返回值都是int类型
DoubleBinaryOperator (double, double) double 两个参数、返回值都是double类型
LongBinaryOperator (long, long) long 两个参数、返回值都是long类型

好了,到此JDK所有重要的函数编程接口都介绍完了。

其他函数编程接口介绍:

【睡JDK】Java函数式编程接口详解之Predicate

【睡JDK】Java函数式编程接口详解之Consumer、Function

【睡JDK】Java函数式编程接口详解之Supplier

end
Java开发乐园

你可能感兴趣的:(Java)