"Функциональные интерфейсы" в Java - это интерфейсы, которые содержат только один абстрактный метод. Они предназначены для использования с лямбда-выражениями (lambda expressions) и методами ссылок (method references) в Java 8 и выше.
Java предоставляет несколько встроенных функциональных интерфейсов в пакете java.util.function, таких как Predicate, Consumer, Function, Supplier и другие. Каждый из этих интерфейсов представляет функцию, которую можно передать в качестве аргумента или вернуть как результат из другого метода, что делает возможным написание более конкретного кода, чем это было раньше.
Например, Predicate представляет функцию, которая принимает один аргумент и возвращает значение типа boolean.
Интерфейс Function представляет функцию, которая принимает один аргумент и возвращает значение другого типа.
Consumer представляет функцию, которая принимает один аргумент и ничего не возвращает, а Supplier представляет функцию, которая ничего не принимает и возвращает значение.
Использование функциональных интерфейсов вместе с лямбда-выражениями позволяет более эффективно и просто передавать функции в другие методы и создавать новые функции внутри других методов.
Пример использования интерфейса Function:
import java.util.function.Function;
public class Example {
public static void main(String[] args) {
Function<Integer, Integer> square = x -> x * x;
System.out.println(square.apply(5)); // выводит на экран 25 }
}
Этот код создает новую функцию square, которая принимает целое число и возвращает его квадрат. Затем мы вызываем эту функцию и передаем ей число.
Еще примеры:
Predicate<String> isLong = s -> s.length() > 10;
boolean result = isLong.test("This is a very long string");
System.out.println(result); // Output: true
Consumer<String> printUpperCase = s -> System.out.println(s.toUpperCase());
printUpperCase.accept("hello"); // Output: HELLO
Supplier<Double> randomDouble = () -> Math.random();
double value = randomDouble.get();
System.out.println(value); // Output: a random double value between 0.0 and 1.0
1606 вопрос-ответ по Java: https://github.com/DEBAGanov/interview_questions
Tелеграмм канал: https://t.me/DEBAGanov
Мое резюме: https://github.com/DEBAGanov