【睡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<T, T>,而且Function的參數和返回值都是同類型T,因此Function的參數和返回值是同類型的時候,我們可以使用UnaryOperator來代替Function。同理,BinaryOperator也是如此,它繼承自BiFunction<T, T, T>,當返回值和兩個參數的類型都相同時,可以使用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開發樂園

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章