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
Awesome!
Completion rate improved to 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!