Binaryoperator: Combinación de Dos Valores
Esta interfaz es especialmente útil al combinar dos valores del mismo tipo, como al realizar cálculos matemáticos o fusionar datos.
@FunctionalInterface
public interface BinaryOperator<T> extends BiFunction<T, T, T> {
T apply(T t1, T t2);
}
La interfaz BinaryOperator<T> extiende a BiFunction<T, T, T>, pero a diferencia de BiFunction, tanto los argumentos de entrada como el valor de retorno siempre deben ser del mismo tipo T.
Su único método abstracto, apply(T t1, T t2), realiza una operación sobre dos argumentos y devuelve el resultado.
Ejemplo práctico
Suponga que tiene un sistema de nómina donde necesita determinar cuál de dos bonificaciones — anual o trimestral — es mayor para que el monto más alto pueda ser otorgado a un empleado.
Main.java
123456789101112131415package com.example; import java.util.function.BinaryOperator; public class Main { public static void main(String[] args) { BinaryOperator<Double> maxBonus = (bonus1, bonus2) -> Math.max(bonus1, bonus2); double annualBonus = 5000.0; double quarterlyBonus = 1500.0; double finalBonus = maxBonus.apply(annualBonus, quarterlyBonus); System.out.println("Awarded Bonus: " + finalBonus); } }
En este ejemplo, se crea un BinaryOperator<Double> que utiliza Math.max() para comparar dos valores y devolver el mayor.
Luego se definen dos bonificaciones: annualBonus (bonificación anual) y quarterlyBonus (bonificación trimestral).
Se llama al método apply() para determinar la bonificación más alta, y el resultado se imprime en la consola. Este enfoque es útil cuando se necesita seleccionar dinámicamente la mejor opción sin lógica condicional compleja.
Métodos Estáticos
Además de su método principal apply(), BinaryOperator<T> incluye varios métodos estáticos útiles:
maxBy(Comparator<T> comparator)– devuelve unBinaryOperator<T>que selecciona el mayor de dos valores según elComparator<T>proporcionado;minBy(Comparator<T> comparator)– devuelve unBinaryOperator<T>que selecciona el menor de dos valores según elComparator<T>proporcionado.
Ejemplo de Uso
Suponga que tiene un sistema de gestión de empleados donde necesita determinar cuál de dos candidatos tiene una calificación más alta para seleccionar al mejor para una promoción.
Main.java
1234567891011121314151617181920212223242526272829303132333435package com.example; import java.util.Comparator; import java.util.function.BinaryOperator; public class Main { public static void main(String[] args) { BinaryOperator<Employee> topPerformer = BinaryOperator.maxBy(Comparator.comparingInt(Employee::getRating)); Employee employee1 = new Employee("John", 85); Employee employee2 = new Employee("Sarah", 90); Employee bestEmployee = topPerformer.apply(employee1, employee2); System.out.println("Top employee: " + bestEmployee.getName()); } } class Employee { private String name; private int rating; public Employee(String name, int rating) { this.name = name; this.rating = rating; } public String getName() { return name; } public int getRating() { return rating; } }
El método BinaryOperator.maxBy() recibe un Comparator<Employee>, que utiliza Employee::getRating para comparar empleados por sus calificaciones.
Luego se crean dos objetos Employee con diferentes calificaciones. El método apply() selecciona al empleado con la calificación más alta y muestra su nombre.
1. ¿Cuál es el propósito principal de la interfaz funcional BinaryOperator<T>?
2. ¿Cuál es el método principal en la interfaz BinaryOperator<T>?
3. ¿Qué interfaz es la madre de BinaryOperator<T>?
4. ¿Qué mostrará la siguiente salida de código?
¡Gracias por tus comentarios!
Pregunte a AI
Pregunte a AI
Pregunte lo que quiera o pruebe una de las preguntas sugeridas para comenzar nuestra charla
Can you provide a code example using BinaryOperator in this context?
How does BinaryOperator differ from BiFunction in practical use?
Can you explain how to use maxBy and minBy with custom objects?
Awesome!
Completion rate improved to 2.33
Binaryoperator: Combinación de Dos Valores
Desliza para mostrar el menú
Esta interfaz es especialmente útil al combinar dos valores del mismo tipo, como al realizar cálculos matemáticos o fusionar datos.
@FunctionalInterface
public interface BinaryOperator<T> extends BiFunction<T, T, T> {
T apply(T t1, T t2);
}
La interfaz BinaryOperator<T> extiende a BiFunction<T, T, T>, pero a diferencia de BiFunction, tanto los argumentos de entrada como el valor de retorno siempre deben ser del mismo tipo T.
Su único método abstracto, apply(T t1, T t2), realiza una operación sobre dos argumentos y devuelve el resultado.
Ejemplo práctico
Suponga que tiene un sistema de nómina donde necesita determinar cuál de dos bonificaciones — anual o trimestral — es mayor para que el monto más alto pueda ser otorgado a un empleado.
Main.java
123456789101112131415package com.example; import java.util.function.BinaryOperator; public class Main { public static void main(String[] args) { BinaryOperator<Double> maxBonus = (bonus1, bonus2) -> Math.max(bonus1, bonus2); double annualBonus = 5000.0; double quarterlyBonus = 1500.0; double finalBonus = maxBonus.apply(annualBonus, quarterlyBonus); System.out.println("Awarded Bonus: " + finalBonus); } }
En este ejemplo, se crea un BinaryOperator<Double> que utiliza Math.max() para comparar dos valores y devolver el mayor.
Luego se definen dos bonificaciones: annualBonus (bonificación anual) y quarterlyBonus (bonificación trimestral).
Se llama al método apply() para determinar la bonificación más alta, y el resultado se imprime en la consola. Este enfoque es útil cuando se necesita seleccionar dinámicamente la mejor opción sin lógica condicional compleja.
Métodos Estáticos
Además de su método principal apply(), BinaryOperator<T> incluye varios métodos estáticos útiles:
maxBy(Comparator<T> comparator)– devuelve unBinaryOperator<T>que selecciona el mayor de dos valores según elComparator<T>proporcionado;minBy(Comparator<T> comparator)– devuelve unBinaryOperator<T>que selecciona el menor de dos valores según elComparator<T>proporcionado.
Ejemplo de Uso
Suponga que tiene un sistema de gestión de empleados donde necesita determinar cuál de dos candidatos tiene una calificación más alta para seleccionar al mejor para una promoción.
Main.java
1234567891011121314151617181920212223242526272829303132333435package com.example; import java.util.Comparator; import java.util.function.BinaryOperator; public class Main { public static void main(String[] args) { BinaryOperator<Employee> topPerformer = BinaryOperator.maxBy(Comparator.comparingInt(Employee::getRating)); Employee employee1 = new Employee("John", 85); Employee employee2 = new Employee("Sarah", 90); Employee bestEmployee = topPerformer.apply(employee1, employee2); System.out.println("Top employee: " + bestEmployee.getName()); } } class Employee { private String name; private int rating; public Employee(String name, int rating) { this.name = name; this.rating = rating; } public String getName() { return name; } public int getRating() { return rating; } }
El método BinaryOperator.maxBy() recibe un Comparator<Employee>, que utiliza Employee::getRating para comparar empleados por sus calificaciones.
Luego se crean dos objetos Employee con diferentes calificaciones. El método apply() selecciona al empleado con la calificación más alta y muestra su nombre.
1. ¿Cuál es el propósito principal de la interfaz funcional BinaryOperator<T>?
2. ¿Cuál es el método principal en la interfaz BinaryOperator<T>?
3. ¿Qué interfaz es la madre de BinaryOperator<T>?
4. ¿Qué mostrará la siguiente salida de código?
¡Gracias por tus comentarios!