Назад к вопросам
Junior
94
questionbank
Для чего используется функциональный интерфейс BiFunction<T, U, R> в Java?
Sobes Copilot
Получайте ответы в реальном времени
Ответ от нейросети
sobes.tech AI
BiFunction<T, U, R> используется для представления функции, которая принимает два аргумента типов T и U, и возвращает результат типа R. Это специальный функциональный интерфейс из пакета java.util.function.
Его абстрактный метод имеет следующую сигнатуру:
// Представляет функцию, которая принимает два аргумента и выдает результат.
// @since 1.8
public interface BiFunction<T, U, R> {
// Применяет эту функцию к заданным аргументам.
// @param t первый аргумент функции
// @param u второй аргумент функции
// @return результат применения функции
R apply(T t, U u);
// Возвращает составную функцию, которая сначала применяет эту функцию к входным данным1
// и входным данным2, а затем применяет функцию after к результату.
// Если оценка любого из выражений выдает исключение, оно передается далее вызывающему.
// @param after функция, применяемая после этой функции
// @throws NullPointerException если after равно null
// @return составная функция, которая сначала применяет эту функцию
// а затем применяет функцию after
default <V> BiFunction<T, U, V> andThen(Function<? super R, ? extends V> after) {
Objects.requireNonNull(after);
return (T t, U u) -> after.apply(apply(t, u));
}
}
Основные сценарии использования:
- Агрегация и комбинирование данных: Объединение или расчет значения на основе двух входных данных.
- Применение логики к двум элементам: Выполнение операции, требующей двух аргументов.
- Использование в потоках (Streams): В операциях типа
reduceилиcollect, где требуется комбинировать элементы попарно.
Пример использования:
// Пример BiFunction для сложения двух целых чисел
BiFunction<Integer, Integer, Integer> sum = (a, b) -> a + b;
// Использование BiFunction
int result = sum.apply(5, 3); // result будет 8
System.out.println(result);
Еще один пример с использованием andThen:
// Пример BiFunction для сложения двух чисел
BiFunction<Integer, Integer, Integer> adder = (a, b) -> a + b;
// Пример Function для преобразования результата сложения в строку
Function<Integer, String> toStringConverter = i -> "Result: " + i;
// Использование andThen для комбинирования BiFunction и Function
BiFunction<Integer, Integer, String> composedFunction = adder.andThen(toStringConverter);
// Применение составной функции
String finalResult = composedFunction.apply(10, 20); // finalResult будет "Result: 30"
System.out.println(finalResult);
BiFunction обеспечивает компактный и читаемый способ передачи поведения (в виде функции) в методы или классы, требующие работы с двумя входными параметрами.