BinaryOperator: Combinando Dois Valores
Esta interface é particularmente útil ao combinar dois valores do mesmo tipo, como ao realizar cálculos matemáticos ou mesclar dados.
@FunctionalInterface
public interface BinaryOperator<T> extends BiFunction<T, T, T> {
T apply(T t1, T t2);
}
A interface BinaryOperator<T> estende BiFunction<T, T, T>, mas, diferentemente de BiFunction, ambos os argumentos de entrada e o valor de retorno devem sempre ser do mesmo tipo T.
Seu único método abstrato, apply(T t1, T t2), executa uma operação em dois argumentos e retorna o resultado.
Exemplo Prático
Considere um sistema de folha de pagamento onde é necessário determinar qual dos dois bônus — anual ou trimestral — é maior para que o valor mais alto seja concedido a um colaborador.
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); } }
Neste exemplo, é criado um BinaryOperator<Double> que utiliza Math.max() para comparar dois valores e retornar o maior deles.
Em seguida, são definidos dois bônus: annualBonus (bônus anual) e quarterlyBonus (bônus trimestral).
O método apply() é chamado para determinar o bônus mais alto, e o resultado é impresso no console. Essa abordagem é útil quando é necessário selecionar dinamicamente a melhor opção sem lógica condicional complexa.
Métodos Estáticos
Além do seu principal método apply(), BinaryOperator<T> inclui vários métodos estáticos úteis:
maxBy(Comparator<T> comparator)– retorna umBinaryOperator<T>que seleciona o maior de dois valores com base noComparator<T>fornecido;minBy(Comparator<T> comparator)– retorna umBinaryOperator<T>que seleciona o menor de dois valores com base noComparator<T>fornecido.
Exemplo de Uso
Considere um sistema de gestão de funcionários onde é necessário determinar qual dos dois candidatos possui uma pontuação mais alta para selecionar o melhor para uma promoção.
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; } }
O método BinaryOperator.maxBy() recebe um Comparator<Employee>, que utiliza Employee::getRating para comparar funcionários por suas avaliações.
Dois objetos Employee são então criados com diferentes avaliações. O método apply() seleciona o funcionário com a maior avaliação e exibe seu nome.
1. Qual é o principal objetivo da interface funcional BinaryOperator<T>?
2. Qual é o método principal na interface BinaryOperator<T>?
3. Qual interface é a mãe de BinaryOperator<T>?
4. Qual será a saída do seguinte código?
Obrigado pelo seu feedback!
Pergunte à IA
Pergunte à IA
Pergunte o que quiser ou experimente uma das perguntas sugeridas para iniciar nosso bate-papo
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?
Incrível!
Completion taxa melhorada para 2.33
BinaryOperator: Combinando Dois Valores
Deslize para mostrar o menu
Esta interface é particularmente útil ao combinar dois valores do mesmo tipo, como ao realizar cálculos matemáticos ou mesclar dados.
@FunctionalInterface
public interface BinaryOperator<T> extends BiFunction<T, T, T> {
T apply(T t1, T t2);
}
A interface BinaryOperator<T> estende BiFunction<T, T, T>, mas, diferentemente de BiFunction, ambos os argumentos de entrada e o valor de retorno devem sempre ser do mesmo tipo T.
Seu único método abstrato, apply(T t1, T t2), executa uma operação em dois argumentos e retorna o resultado.
Exemplo Prático
Considere um sistema de folha de pagamento onde é necessário determinar qual dos dois bônus — anual ou trimestral — é maior para que o valor mais alto seja concedido a um colaborador.
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); } }
Neste exemplo, é criado um BinaryOperator<Double> que utiliza Math.max() para comparar dois valores e retornar o maior deles.
Em seguida, são definidos dois bônus: annualBonus (bônus anual) e quarterlyBonus (bônus trimestral).
O método apply() é chamado para determinar o bônus mais alto, e o resultado é impresso no console. Essa abordagem é útil quando é necessário selecionar dinamicamente a melhor opção sem lógica condicional complexa.
Métodos Estáticos
Além do seu principal método apply(), BinaryOperator<T> inclui vários métodos estáticos úteis:
maxBy(Comparator<T> comparator)– retorna umBinaryOperator<T>que seleciona o maior de dois valores com base noComparator<T>fornecido;minBy(Comparator<T> comparator)– retorna umBinaryOperator<T>que seleciona o menor de dois valores com base noComparator<T>fornecido.
Exemplo de Uso
Considere um sistema de gestão de funcionários onde é necessário determinar qual dos dois candidatos possui uma pontuação mais alta para selecionar o melhor para uma promoção.
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; } }
O método BinaryOperator.maxBy() recebe um Comparator<Employee>, que utiliza Employee::getRating para comparar funcionários por suas avaliações.
Dois objetos Employee são então criados com diferentes avaliações. O método apply() seleciona o funcionário com a maior avaliação e exibe seu nome.
1. Qual é o principal objetivo da interface funcional BinaryOperator<T>?
2. Qual é o método principal na interface BinaryOperator<T>?
3. Qual interface é a mãe de BinaryOperator<T>?
4. Qual será a saída do seguinte código?
Obrigado pelo seu feedback!