Functions as First Class Citizen Variables

Hello all, In this post we are going to talk about functions as first class citizens and it’s usages.

taken from – https://www.linkedin.com/topic/functional-programming

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.

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;
}
}

Leave a Comment

Your email address will not be published. Required fields are marked *