Los dos hermanos Big U (Unario: un yuan) y Big B (Binario: binario) presentados hoy no son en realidad cosas nuevas, sino dos casos especiales. Veamos primero el código fuente de Kangkang.
Código fuente de UnaryOperator :
@FunctionalInterface
public interface UnaryOperator<T> extends Function<T, T> {
static <T> UnaryOperator<T> identity() {
return t -> t;
}
}
Código fuente de 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;
}
}
Se puede ver en el código fuente que UnaryOperator hereda de Function <T, T>, y los parámetros y valores de retorno de Function son del mismo tipo T. Por lo tanto, cuando los parámetros y valores de retorno de Function son de del mismo tipo, podemos usar UnaryOperator en lugar de Function. De la misma manera, lo mismo ocurre con BinaryOperator, que hereda de BiFunction <T, T, T>. Cuando el valor de retorno y los tipos de los dos parámetros son los mismos, se puede usar BinaryOperator en lugar de BiFunction. Esto también se hace para simplificar el desarrollo. JDK solo proporciona implementaciones univariadas y binarias. Por supuesto, si lo necesita, también puede implementar TernaryOperator (ternario) usted mismo.
Function, como interfaz de programación de funciones que viene con JDK, tiene muchas variaciones y su estado es evidente, por lo que los amigos deben leer más y pensar más. JDK nos da mucho repollo, pero espero que puedas plantarlo en tu corazón. Sus semillas, aprende a integrarlas, aprende y aplicalas con flexibilidad.
También existen algunas variantes de Operador, como las siguientes:
Nombre de la interfaz | parámetro | Tipo de devolución | describir |
---|---|---|---|
Operador IntUnario | En t | En t | Tanto los parámetros como los valores de retorno son de tipo int. |
OperadorUnarioDoble | doble | doble | Los parámetros y valores de retorno son de tipo doble. |
OperadorUnario Largo | largo | largo | Los parámetros y valores de retorno son todos de tipo largo. |
OperadorIntBinario | (int, int) | En t | Tanto los parámetros como el valor de retorno son de tipo int. |
OperadorBinarioDoble | (doble doble) | doble | Tanto los parámetros como el valor de retorno son de tipo doble. |
OperadorBinario Largo | (largo largo) | largo | Tanto los parámetros como el valor de retorno son de tipo largo. |
Bien, ahora se han introducido todas las interfaces de programación funcionales importantes de JDK.
Introducción a otras interfaces de programación funcionales:
[JDK durmiente] Explicación detallada del predicado de la interfaz de programación funcional de Java
[JDK durmiente] Proveedor de explicación detallada de la interfaz de programación funcional de Java