Функциональный интерфейс в Java – это интерфейс, который содержит только 1 абстрактный метод. Основное назначение – использование в лямбда выражениях и method reference.
Java functional interfaces - 1
Наличие 1 абстрактного метода - это единственное условие, таким образом функциональный интерфейс может содержать так же default и static методы. К функциональному интерфейсу можно добавить аннотацию @FunctionalInterface. Это не обязательно, но при наличии данной аннотации код не скомпилируется, если будет больше или меньше, чем 1 абстрактный метод. Рекомендуется добавлять @FunctionalInterface. Это позволит использовать интерфейс в лямбда выражениях, не остерегаясь того, что кто-то добавит в интерфейс новый абстрактный метод и он перестанет быть функциональным. В Java есть встроенные функциональные интерфейсы, размещенные в пакете java.util.function. Не буду останавливаться на них подробно. Отмечу, что наиболее часто используются: Consumer<T>, Function<T,R>, Predicate<T>, Supplier<T>, UnaryOperator<T> и их Bi – формы. Подробнее можно посмотреть на странице документации: Package java.util.function

import java.util.function.Predicate;

//Определяем свой функциональный интерфейс
@FunctionalInterface
interface MyPredicate {
    boolean test(Integer value);
}

public class Tester {
    public static void main(String[] args) throws Exception {
        MyPredicate myPredicate = x -> x > 0;
        System.out.println(myPredicate.test(10));   //true

        //Аналогично, но используется встроенный функциональный интерфейс java.util.function.Predicate
        Predicate<Integer> predicate = x -> x > 0;
        System.out.println(predicate.test(-10));    //false
    }
}
Но оказывается есть один тонкий момент, описанный в Java Language Specification: “interfaces do not inherit from Object, but rather implicitly declare many of the same methods as Object.” Это означает, что функциональные интерфейсы могут содержать дополнительно абстрактные методы, определенные в классе Object. Код ниже валиден, ошибок компиляции и времени выполнения не будет:

@FunctionalInterface
public interface Comparator<T> {
   int compare(T o1, T o2);
   boolean equals(Object obj);
   // другие default или static методы
}
Будьте внимательны на собеседовании! Удачи!