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. |