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. Який буде результат виконання наступного коду?
Дякуємо за ваш відгук!
Запитати АІ
Запитати АІ
Запитайте про що завгодно або спробуйте одне із запропонованих запитань, щоб почати наш чат