Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Aprenda BinaryOperator: Combinando Dois Valores | Fundamentos e Capacidades Funcionais da Stream API
Stream API

bookBinaryOperator: 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ônusanual ou trimestral — é maior para que o valor mais alto seja concedido a um colaborador.

Main.java

Main.java

copy
123456789101112131415
package 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 um BinaryOperator<T> que seleciona o maior de dois valores com base no Comparator<T> fornecido;
  • minBy(Comparator<T> comparator) – retorna um BinaryOperator<T> que seleciona o menor de dois valores com base no Comparator<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

Main.java

copy
1234567891011121314151617181920212223242526272829303132333435
package 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?

question mark

Qual é o principal objetivo da interface funcional BinaryOperator<T>?

Select the correct answer

question mark

Qual é o método principal na interface BinaryOperator<T>?

Select the correct answer

question mark

Qual interface é a mãe de BinaryOperator<T>?

Select the correct answer

question mark

Qual será a saída do seguinte código?

Select the correct answer

Tudo estava claro?

Como podemos melhorá-lo?

Obrigado pelo seu feedback!

Seção 1. Capítulo 15

Pergunte à IA

expand

Pergunte à IA

ChatGPT

Pergunte o que quiser ou experimente uma das perguntas sugeridas para iniciar nosso bate-papo

Awesome!

Completion rate improved to 2.33

bookBinaryOperator: 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ônusanual ou trimestral — é maior para que o valor mais alto seja concedido a um colaborador.

Main.java

Main.java

copy
123456789101112131415
package 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 um BinaryOperator<T> que seleciona o maior de dois valores com base no Comparator<T> fornecido;
  • minBy(Comparator<T> comparator) – retorna um BinaryOperator<T> que seleciona o menor de dois valores com base no Comparator<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

Main.java

copy
1234567891011121314151617181920212223242526272829303132333435
package 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?

question mark

Qual é o principal objetivo da interface funcional BinaryOperator<T>?

Select the correct answer

question mark

Qual é o método principal na interface BinaryOperator<T>?

Select the correct answer

question mark

Qual interface é a mãe de BinaryOperator<T>?

Select the correct answer

question mark

Qual será a saída do seguinte código?

Select the correct answer

Tudo estava claro?

Como podemos melhorá-lo?

Obrigado pelo seu feedback!

Seção 1. Capítulo 15
some-alt