BinaryOperator: Об'єднання Двох Значень
Цей інтерфейс є особливо корисним для об'єднання двох значень одного типу, наприклад, для виконання математичних обчислень або злиття даних.
@FunctionalInterface
public interface BinaryOperator<T> extends BiFunction<T, T, T> {
T apply(T t1, T t2);
}
BinaryOperator<T> інтерфейс розширює BiFunction<T, T, T>, але на відміну від BiFunction, обидва вхідних аргументи та значення, що повертається, завжди повинні бути одного типу T.
Його єдиний абстрактний метод apply(T t1, T t2) виконує операцію над двома аргументами та повертає результат.
Практичний приклад
Припустимо, у вас є система нарахування заробітної плати, де потрібно визначити, яка з двох премій — річна чи квартальна — є більшою, щоб виплатити співробітнику найбільшу суму.
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); } }
У цьому прикладі створюється BinaryOperator<Double>, який використовує Math.max() для порівняння двох значень і повертає більше з них.
Далі визначаються дві премії: annualBonus (річна премія) та quarterlyBonus (квартальна премія).
Викликається метод apply() для визначення більшої премії, а результат виводиться у консоль. Такий підхід є корисним, коли потрібно динамічно обирати найкращий варіант без складної умовної логіки.
Статичні методи
Окрім основного методу apply(), інтерфейс BinaryOperator<T> містить кілька корисних статичних методів:
maxBy(Comparator<T> comparator)– повертаєBinaryOperator<T>, який обирає більше з двох значень на основі наданогоComparator<T>;minBy(Comparator<T> comparator)– повертаєBinaryOperator<T>, який обирає менше з двох значень на основі наданогоComparator<T>.
Приклад використання
Припустимо, у вас є система управління співробітниками, де потрібно визначити, який з двох кандидатів має вищий рейтинг, щоб обрати найкращого для підвищення.
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; } }
Метод BinaryOperator.maxBy() приймає Comparator<Employee>, який використовує Employee::getRating для порівняння співробітників за їхніми рейтингами.
Два об'єкти Employee потім створюються з різними рейтингами. Метод apply() обирає співробітника з найвищим рейтингом і виводить його ім'я.
1. Яке основне призначення функціонального інтерфейсу BinaryOperator<T>?
2. Який основний метод у інтерфейсі BinaryOperator<T>?
3. Який інтерфейс є батьківським для BinaryOperator<T>?
4. Який результат виведе наступний код?
Дякуємо за ваш відгук!
Запитати АІ
Запитати АІ
Запитайте про що завгодно або спробуйте одне із запропонованих запитань, щоб почати наш чат
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: Об'єднання Двох Значень
Свайпніть щоб показати меню
Цей інтерфейс є особливо корисним для об'єднання двох значень одного типу, наприклад, для виконання математичних обчислень або злиття даних.
@FunctionalInterface
public interface BinaryOperator<T> extends BiFunction<T, T, T> {
T apply(T t1, T t2);
}
BinaryOperator<T> інтерфейс розширює BiFunction<T, T, T>, але на відміну від BiFunction, обидва вхідних аргументи та значення, що повертається, завжди повинні бути одного типу T.
Його єдиний абстрактний метод apply(T t1, T t2) виконує операцію над двома аргументами та повертає результат.
Практичний приклад
Припустимо, у вас є система нарахування заробітної плати, де потрібно визначити, яка з двох премій — річна чи квартальна — є більшою, щоб виплатити співробітнику найбільшу суму.
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); } }
У цьому прикладі створюється BinaryOperator<Double>, який використовує Math.max() для порівняння двох значень і повертає більше з них.
Далі визначаються дві премії: annualBonus (річна премія) та quarterlyBonus (квартальна премія).
Викликається метод apply() для визначення більшої премії, а результат виводиться у консоль. Такий підхід є корисним, коли потрібно динамічно обирати найкращий варіант без складної умовної логіки.
Статичні методи
Окрім основного методу apply(), інтерфейс BinaryOperator<T> містить кілька корисних статичних методів:
maxBy(Comparator<T> comparator)– повертаєBinaryOperator<T>, який обирає більше з двох значень на основі наданогоComparator<T>;minBy(Comparator<T> comparator)– повертаєBinaryOperator<T>, який обирає менше з двох значень на основі наданогоComparator<T>.
Приклад використання
Припустимо, у вас є система управління співробітниками, де потрібно визначити, який з двох кандидатів має вищий рейтинг, щоб обрати найкращого для підвищення.
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; } }
Метод BinaryOperator.maxBy() приймає Comparator<Employee>, який використовує Employee::getRating для порівняння співробітників за їхніми рейтингами.
Два об'єкти Employee потім створюються з різними рейтингами. Метод apply() обирає співробітника з найвищим рейтингом і виводить його ім'я.
1. Яке основне призначення функціонального інтерфейсу BinaryOperator<T>?
2. Який основний метод у інтерфейсі BinaryOperator<T>?
3. Який інтерфейс є батьківським для BinaryOperator<T>?
4. Який результат виведе наступний код?
Дякуємо за ваш відгук!