¿Qué FunctionalInterface debo usar?

manos:

Estaba aprendiendo a escribir alguna representación lambda como FunctionalInterface . Por lo tanto, para sumar dos números enteros que utilicé:

BiFunction<Integer, Integer, Integer> biFunction = (a, b) -> a + b;
System.out.println(biFunction.apply(10, 60));

Me da la salida 70 . Pero si lo escribo como este

BinaryOperator<Integer, Integer, Integer> binaryOperator = (a, b) -> a + b;

Me sale un error que dice

Número incorrecto de argumentos de tipo: 3; requerido: 1

No es BinaryOperatorun hijo de BinaryFunction? ¿Cómo puedo mejorar esto?

también:

BinaryOperator

Dado que BinaryOperatorlas obras en un solo tipo de operandos y resultado . es decir BinaryOperator<T>.

No es BinaryOperator un niño de BinaryFunction?

Si. BinaryOperatorlo hace extends BiFunction. Sin embargo, hacer notar los estados de documentación (formato a la mía):

Esta es una especialización de BiFunctionpara el caso en que los operandos y el resultado son todos del mismo tipo .

La representación completa es:

BinaryOperator<T> extends BiFunction<T,T,T>

por lo tanto, su código deberá trabajar con

BinaryOperator<Integer> binaryOperator = (a, b) -> a + b;
System.out.println(binaryOperator.apply(10, 60));

IntBinaryOperator

Si se supone que se trata de dos números enteros primitivos en la actualidad en su ejemplo ( agregar dos números enteros que he usado ), se puede hacer uso de la IntBinaryOperatorFunctionalInterface como

IntBinaryOperator intBinaryOperator = (a, b) -> a + b;
System.out.println(intBinaryOperator.applyAsInt(10, 60));

Representa una operación en dos intoperandos -valued y producir un resultado int-valorado. Esta es la especialización tipo primitivo de BinaryOperatorpara int.


Estoy usando entero, ¿puedo utilizar IntBinaryOperator

Sí, todavía puede usarlo , pero cuenta la representación de laIntBinaryOperator

Integer first = 10;
Integer second = 60;
IntBinaryOperator intBinaryOperator = new IntBinaryOperator() {
    @Override
    public int applyAsInt(int a, int b) {
        return Integer.sum(a, b);
    }
};
Integer result = intBinaryOperator.applyAsInt(first, second); 

habría que incurrir en un gasto general de unboxing first y secondde las primitivas y luego autoboxing la suma como una salida para resultel tipo Integer.

Nota : Tenga cuidado de utilizar valores nulos de seguridad para elIntegerembargo o de lo contrario es probable que terminar con unNullPointerException.

Supongo que te gusta

Origin http://43.154.161.224:23101/article/api/json?id=167323&siteId=1
Recomendado
Clasificación