Pages

Subscribe:

Ads 468x60px

Tuesday, February 7, 2017

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