Binaryoperator: Combinazione di Due Valori
Questa interfaccia è particolarmente utile quando si devono combinare due valori dello stesso tipo, ad esempio per eseguire calcoli matematici o unire dati.
@FunctionalInterface
public interface BinaryOperator<T> extends BiFunction<T, T, T> {
T apply(T t1, T t2);
}
L'interfaccia BinaryOperator<T> estende BiFunction<T, T, T>, ma a differenza di BiFunction, entrambi gli argomenti di input e il valore di ritorno devono sempre essere dello stesso tipo T.
Il suo unico metodo astratto, apply(T t1, T t2), esegue un'operazione su due argomenti e restituisce il risultato.
Esempio pratico
Si consideri un sistema di gestione stipendi in cui è necessario determinare quale tra due bonus — annuale o trimestrale — sia maggiore in modo che l'importo più elevato possa essere assegnato a un dipendente.
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); } }
In questo esempio, si crea un BinaryOperator<Double> che utilizza Math.max() per confrontare due valori e restituire quello maggiore.
Si definiscono quindi due bonus: annualBonus (bonus annuale) e quarterlyBonus (bonus trimestrale).
Il metodo apply() viene chiamato per determinare il bonus più alto e il risultato viene stampato sulla console. Questo approccio è utile quando è necessario selezionare dinamicamente l'opzione migliore senza una logica condizionale complessa.
Metodi Statici
Oltre al suo metodo principale apply(), BinaryOperator<T> include diversi utili metodi statici:
maxBy(Comparator<T> comparator)– restituisce unBinaryOperator<T>che seleziona il maggiore tra due valori in base alComparator<T>fornito;minBy(Comparator<T> comparator)– restituisce unBinaryOperator<T>che seleziona il minore tra due valori in base alComparator<T>fornito.
Esempio di Utilizzo
Supponiamo di avere un sistema di gestione dei dipendenti in cui è necessario determinare quale tra due candidati abbia una valutazione più alta al fine di selezionare il migliore per una promozione.
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; } }
Il metodo BinaryOperator.maxBy() accetta un Comparator<Employee>, che utilizza Employee::getRating per confrontare i dipendenti in base alle loro valutazioni.
Vengono quindi creati due oggetti Employee con valutazioni differenti. Il metodo apply() seleziona il dipendente con la valutazione più alta e stampa il suo nome.
1. Qual è lo scopo principale dell'interfaccia funzionale BinaryOperator<T>?
2. Qual è il metodo principale nell'interfaccia BinaryOperator<T>?
3. Quale interfaccia è la genitrice di BinaryOperator<T>?
4. Quale sarà l'output del seguente codice?
Grazie per i tuoi commenti!
Chieda ad AI
Chieda ad AI
Chieda pure quello che desidera o provi una delle domande suggerite per iniziare la nostra conversazione
Fantastico!
Completion tasso migliorato a 2.33
Binaryoperator: Combinazione di Due Valori
Scorri per mostrare il menu
Questa interfaccia è particolarmente utile quando si devono combinare due valori dello stesso tipo, ad esempio per eseguire calcoli matematici o unire dati.
@FunctionalInterface
public interface BinaryOperator<T> extends BiFunction<T, T, T> {
T apply(T t1, T t2);
}
L'interfaccia BinaryOperator<T> estende BiFunction<T, T, T>, ma a differenza di BiFunction, entrambi gli argomenti di input e il valore di ritorno devono sempre essere dello stesso tipo T.
Il suo unico metodo astratto, apply(T t1, T t2), esegue un'operazione su due argomenti e restituisce il risultato.
Esempio pratico
Si consideri un sistema di gestione stipendi in cui è necessario determinare quale tra due bonus — annuale o trimestrale — sia maggiore in modo che l'importo più elevato possa essere assegnato a un dipendente.
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); } }
In questo esempio, si crea un BinaryOperator<Double> che utilizza Math.max() per confrontare due valori e restituire quello maggiore.
Si definiscono quindi due bonus: annualBonus (bonus annuale) e quarterlyBonus (bonus trimestrale).
Il metodo apply() viene chiamato per determinare il bonus più alto e il risultato viene stampato sulla console. Questo approccio è utile quando è necessario selezionare dinamicamente l'opzione migliore senza una logica condizionale complessa.
Metodi Statici
Oltre al suo metodo principale apply(), BinaryOperator<T> include diversi utili metodi statici:
maxBy(Comparator<T> comparator)– restituisce unBinaryOperator<T>che seleziona il maggiore tra due valori in base alComparator<T>fornito;minBy(Comparator<T> comparator)– restituisce unBinaryOperator<T>che seleziona il minore tra due valori in base alComparator<T>fornito.
Esempio di Utilizzo
Supponiamo di avere un sistema di gestione dei dipendenti in cui è necessario determinare quale tra due candidati abbia una valutazione più alta al fine di selezionare il migliore per una promozione.
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; } }
Il metodo BinaryOperator.maxBy() accetta un Comparator<Employee>, che utilizza Employee::getRating per confrontare i dipendenti in base alle loro valutazioni.
Vengono quindi creati due oggetti Employee con valutazioni differenti. Il metodo apply() seleziona il dipendente con la valutazione più alta e stampa il suo nome.
1. Qual è lo scopo principale dell'interfaccia funzionale BinaryOperator<T>?
2. Qual è il metodo principale nell'interfaccia BinaryOperator<T>?
3. Quale interfaccia è la genitrice di BinaryOperator<T>?
4. Quale sarà l'output del seguente codice?
Grazie per i tuoi commenti!