Java functional programming

Java functional programming

what do you mean by functional? it is an interface that contains only one abstract method.

what is predicate ? predicates mean functions with one argument that return a boolean value

consider an example:

@FunctionalInterface
public interface EvenOdd {
    
    Boolean isEven(int number);
    // rest can be only complete methods
}

in this there is only one method hence that is an potential predicate.

The above defined predicate can be used in the following manner:


public class StreamOne
 {
    public static void main(String[] args) {
        EvenOdd evenOdd = num-> num%2==0; //Here we have provided the implementation for that predicate.
        System.out.println("\n\n");
        System.out.println(evenOdd.isEven(20));
        System.out.println(evenOdd.isEven(21));
    }
}

for simpler understanding, we could consider the example as:


public boolean isEven(int num){

    Boolean val = num%2==0;
    return val;
}

if we look carefully the compiler already knows that:

  • method is alway public as this is from an interface
  • compiler knows that it has a boolean return type, as there is only one method to look at.
  • compiler knows the method name, as there is only one method to look at.

so we can omit all that info to


(num)->{
    Boolean val = num%2==0;
    return val;
}

and now because it has only one argument, we can get away with the bracket

num->{
    Boolean val = num%2==0;
    return val;
}

if we can make the method body to one liner then we can even remove the curly braces.

num -> num%2==0;

That is how we got this predicate.

Java provided functional interfaces

Interface Description
BiConsumer<T,U> Represents an operation that accepts two input arguments and returns no result.
BiFunction<T,U,R> Represents a function that accepts two arguments and produces a result.
BinaryOperator Represents an operation upon two operands of the same type, producing a result of the same type as the operands.
BiPredicate<T,U> Represents a predicate (boolean-valued function) of two arguments.
BooleanSupplier Represents a supplier of boolean-valued results.
Consumer Represents an operation that accepts a single input argument and returns no result.
DoubleBinaryOperator Represents an operation upon two double-valued operands and producing a double-valued result.
DoubleConsumer Represents an operation that accepts a single double-valued argument and returns no result.
DoubleFunction Represents a function that accepts a double-valued argument and produces a result.
DoublePredicate Represents a predicate (boolean-valued function) of one double-valued argument.
DoubleSupplier Represents a supplier of double-valued results.
DoubleToIntFunction Represents a function that accepts a double-valued argument and produces an int-valued result.
DoubleToLongFunction Represents a function that accepts a double-valued argument and produces a long-valued result.
DoubleUnaryOperator Represents an operation on a single double-valued operand that produces a double-valued result.
Function<T,R> Represents a function that accepts one argument and produces a result.
IntBinaryOperator Represents an operation upon two int-valued operands and producing an int-valued result.
IntConsumer Represents an operation that accepts a single int-valued argument and returns no result.
IntFunction Represents a function that accepts an int-valued argument and produces a result.
IntPredicate Represents a predicate (boolean-valued function) of one int-valued argument.
IntSupplier Represents a supplier of int-valued results.
IntToDoubleFunction Represents a function that accepts an int-valued argument and produces a double-valued result.
IntToLongFunction Represents a function that accepts an int-valued argument and produces a long-valued result.
IntUnaryOperator Represents an operation on a single int-valued operand that produces an int-valued result.
LongBinaryOperator Represents an operation upon two long-valued operands and producing a long-valued result.
LongConsumer Represents an operation that accepts a single long-valued argument and returns no result.
LongFunction Represents a function that accepts a long-valued argument and produces a result.
LongPredicate Represents a predicate (boolean-valued function) of one long-valued argument.
LongSupplier Represents a supplier of long-valued results.
LongToDoubleFunction Represents a function that accepts a long-valued argument and produces a double-valued result.
LongToIntFunction Represents a function that accepts a long-valued argument and produces an int-valued result.
LongUnaryOperator Represents an operation on a single long-valued operand that produces a long-valued result.
ObjDoubleConsumer Represents an operation that accepts an object-valued and a double-valued argument, and returns no result.
ObjIntConsumer Represents an operation that accepts an object-valued and a int-valued argument, and returns no result.
ObjLongConsumer Represents an operation that accepts an object-valued and a long-valued argument, and returns no result.
Predicate Represents a predicate (boolean-valued function) of one argument.
Supplier Represents a supplier of results.
ToDoubleBiFunction<T,U> Represents a function that accepts two arguments and produces a double-valued result.
ToDoubleFunction Represents a function that produces a double-valued result.
ToIntBiFunction<T,U> Represents a function that accepts two arguments and produces an int-valued result.
ToIntFunction Represents a function that produces an int-valued result.
ToLongBiFunction<T,U> Represents a function that accepts two arguments and produces a long-valued result.
ToLongFunction Represents a function that produces a long-valued result.
UnaryOperator Represents an operation on a single operand that produces a result of the same type as its operand.