Master java skills

Functional Interfaces

Functional interfaces are also known as Single Abstract Method interfaces (SAM Interfaces). As its name suggests, a functional interface allows only one abstract method in it.

Java 8 has introduced @FunctionalInterface annotation to mark an interface as functional interface. This annotation should be used to give compile-time error if a functional interface violates the contracts.

Example

@FunctionalInterface
public interface FunctionalInterfaceExample {
    public void display();
}

java.lang.Runnable is also a funtional interface since it has just one abstract method. Below is a list of predefined functional interfaces.

Rules for functional interfaces

  1. A functional interface can have only one abstract method. But it can have default and static methods.
  2. A functional interface cannot extend another functional interface.
  3. A functional interface can extend an interface which doesn’t have any abstract method i.e. It only has default and static methods.

Functional interface with default and static methods

@FunctionalInterface
public interface FunctionalInterfaceExample {
    
    public void display();

    //default method which has definition
    default void displayDefaultMessage() {
	System.out.println("This is default message.");
    }

    static void displayStaticMessage () {
	System.out.println("This is static message of the inerface.");
    }

}

Predefined functional interfaces

InterfaceDescription
BiConsumer<T, U>It has a method that accepts two input arguments and returns no result.
Consumer<T> It has a method that accepts a single argument and returns no result.
Function<T, R> It has a method accepts one argument and returns a result.
Predicate<T>It has a predicate (boolean-valued function) of one argument.
BiFunction<T,U,R> It has a method that accepts two arguments and returns a a result.
BinaryOperator<T> It has a method upon two operands of the same data type. It returns a result of the same type as the operands.
BiPredicate<T,U>It has a predicate (boolean-valued function) of two arguments.
BooleanSupplierIt represents a supplier of boolean-valued results.
DoubleBinaryOperatorIt represents an operation upon two double type operands and returns a double type value.
DoubleConsumer It has a method that accepts a single double type argument and returns no result.
DoubleFunction<R> It has a method that accepts a double type argument and produces a result.
DoublePredicateIt has a predicate (boolean-valued function) of one double type argument.
DoubleSupplierIt represents a supplier of double type results.
DoubleToIntFunction It has a method that accepts a double type argument and produces an int type result.
DoubleToLongFunction It has a method that accepts a double type argument and produces a long type result.
DoubleUnaryOperatorIt represents an operation on a single double type operand that produces a double type result.
IntBinaryOperatorIt represents an operation upon two int type operands and returns an int type result.
IntConsumer It has a method that accepts a single integer argument and returns no result.
IntFunction<R> It has a method that accepts an integer argument and returns a result.
IntPredicateIt represents a predicate (boolean-valued function) of one integer argument.
IntSupplierIt represents a supplier of integer type.
IntToDoubleFunctionIt represents a function that accepts an integer argument and returns a double.
IntToLongFunctionIt represents a function that accepts an integer argument and returns a long.
IntUnaryOperatorIt represents an operation on a single integer operand that produces an integer result.
LongBinaryOperatorIt represents an operation upon two long type operands and returns a long type result.
LongConsumerIt represents an operation that accepts a single long type argument and returns no result.
LongFunction<R> It has a method that accepts a long type argument and returns a result.
LongPredicateIt represents a predicate (boolean-valued function) of one long type argument.
LongSupplierIt represents a supplier of long type results.
LongToDoubleFunction It has a method that accepts a long type argument and returns a result of double type.
LongToIntFunctionIt represents a function that accepts a long type argument and returns an integer result.
LongUnaryOperatorIt represents an operation on a single long type operand that returns a long type result.
ObjDoubleConsumer<T> It has a method that accepts an object and a double argument, and returns no result.
ObjIntConsumer<T> It has a method that accepts an object and an integer argument. It does not return result.
ObjLongConsumer<T> It has a method that accepts an object and a long argument, it returns no result.
Supplier<T>It represents a supplier of results.
ToDoubleBiFunction<T,U> It has a method that accepts two arguments and produces a double type result.
ToDoubleFunction<T> It has a method that returns a double type result.
ToIntBiFunction<T,U> It has a method that accepts two arguments and returns an integer.
ToIntFunction<T> It has a method that returns an integer.
ToLongBiFunction<T,U> It has a method that accepts two arguments and returns a result of long type.
ToLongFunction<T> It has a method that returns a result of long type.
UnaryOperator<T>It represents an operation on a single operand that returnsa a result of the same type as its operand.