Hello all, In this post we are going to talk about functions as first class citizens and it's usages.
The easiest way to understand is to analyze a demonstration. Package
java.util.function in java 8 contains all kinds of single method interfaces. In this samples we are going to use the java.util.function.Function and java.util.function.BiFunction interfaces.
taken from - https://www.linkedin.com/topic/functional-programming |
1. Create an inline lambda expression and store in a variable.
BiFunction<Integer, Integer, Integer> addFunction = (int1, int2) -> { return int1 + int2; };
to call the above method we can do as follows.
addFunction.apply(100, 200);
2. Create a static method that fits into the signature of the BiFunction interface, then assign it to the variable and invoke.
import java.util.function.BiFunction; /** * Created by aruna on 2/7/17. */ public class Main { public static void main(String[] args) throws Exception { //create the variable BiFunction<Integer, Integer, Integer> addFunctionVariable; //assign the function to variable addFunctionVariable = Main::addStaticFunction; //invoke addFunctionVariable.apply(100, 200); } private static int addStaticFunction(int int1, int int2) { return int1 + int2; } }
3. Create a instance method that fits to the signature of the BiFunction interface. In this approach, first we have to create the instance to acquire the function variable.
import java.util.function.BiFunction; /** * Created by aruna on 2/7/17. */ public class Main { public static void main(String[] args) throws Exception { //create the variable BiFunction<Integer, Integer, Integer> addFunctionVariable; //create Main Object Main main = new Main(); //assign the instance method to variable addFunctionVariable = main::addFunction; //invoke addFunctionVariable.apply(100, 200); } private int addFunction(int int1, int int2) { return int1 + int2; } }
Now take an example, how to pass functions as variables and do some stuff.
import java.util.function.Function; /** * Created by aruna on 2/7/17. */ public class Main { public static void main(String[] args) throws Exception { //define a function that multiply integer by 100 Function<Integer, Integer> function = (intValue) -> { return intValue * 100;}; //pass that function as a variable multiplyAndAdd(100 , 200, function); } private static int multiplyAndAdd(int int1, int int2, Function<Integer, Integer> function){ if(function != null) { int1 = function.apply(int1); int2 = function.apply(int2); } return int1+ int2; } }