Ответ
Function<T, R> — это функциональный интерфейс, представляющий функцию, преобразующую один аргумент типа T в результат типа R. Это основа для операций преобразования (mapping) в функциональном стиле.
Сигнатура: R apply(T t)
Ключевые сценарии использования:
-
Преобразование элементов в Stream API (
map):List<String> names = List.of("alice", "bob"); // Function для преобразования строки в верхний регистр Function<String, String> toUpperCase = String::toUpperCase; List<String> upperNames = names.stream() .map(toUpperCase) .toList(); // ["ALICE", "BOB"] -
Извлечение данных или вычисление значений:
Function<Person, String> getName = Person::getName; Function<String, Integer> getLength = String::length; -
Композиция функций (
andThen,compose):Function<Integer, Integer> multiplyByTwo = x -> x * 2; Function<Integer, Integer> addThree = x -> x + 3; // f(x) = (x * 2) + 3 Function<Integer, Integer> multiplyThenAdd = multiplyByTwo.andThen(addThree); // g(x) = (x + 3) * 2 Function<Integer, Integer> addThenMultiply = multiplyByTwo.compose(addThree); System.out.println(multiplyThenAdd.apply(5)); // 13 System.out.println(addThenMultiply.apply(5)); // 16 -
Использование в других API:
Optional.map(): Преобразование значения внутриOptional.Optional<String> opt = Optional.of("hello"); Optional<Integer> lengthOpt = opt.map(String::length); // Optional[5]Collectors.toMap(): Задание функции для ключа и значения.- Методы, принимающие
Functionдля гибкой настройки поведения (паттерн Стратегия).