Functional interface – an interface with single abstract method. Optionally marked with @FunctionalInterface annotation.
@FunctionalInterface
interface MyFunction {
Integer square(Integer x);
}
MyFunction func = x -> x * x;
System.out.println(func.square(7));
Lambda – functional interface with a method, which receives and returns value
Function<Integer, Integer> square = num -> num * num; System.out.println(square.apply(4));
Supplier – function, which does not receive value, but returns one. Mostly used for lazy value generation.
Supplier<Integer> sup = () -> {
return 5;
};
System.out.println(sup.get());
Consumer – function, which receive value, but does not return. Mostly used for side effect functionality.
Consumer<Integer> con = (v) -> {
System.out.println(v * v);
};
con.accept(5);
Predicate – function, which receives any type of value and returns only boolean value
Predicate<Integer> isPositive = x-> x>0; System.out.println(isPositive.test(5));