Refactored Codes
Using java.util.function.BinaryOperator to create function to return maximum and minimum value in functional programming way
You can read first part of this article here . We all have implemented methods to get maximum or minimum between two different values. A value can be anything, it can be a primitive or an object. It can be an integer or a string or a person object. We were doing this in an imperative ways. like this. Maximum function using Imperative way,  uses If-Else statement.
private static int maximumWithIfElse(int num1, int num2) {
    int max = num2;
    if(max < num1) {
        max = num1;
    }
    return max;
}
Maximum function imperative way, uses ternary operator
private static int maximum(int num1, int num2){
    return num1 > num2 ? num1 : num2;
}
Minimum function using Imperative way, uses If-Else statement
private static int minimumWithIfElse(int num1, int num2) {
    int min = num2;
    if(min > num1) {
        min = num1;
    }
    return min;
}
Minimum function using Imperative way, uses ternary operator
private static int minimum(int num1, int num2) {
    return num1 < num2 ? num1 : num2;
}
All of the above statements are small and does their job. We can use the static methods provided by BinaryOperator to achieve the same Maximum function using functional programming.
BinaryOperator<Integer>	maxInteger = BinaryOperator.maxBy(Integer::compareTo);
Minimum function using functional programming.
BinaryOperator<Integer>	minInteger = BinaryOperator.minBy(Integer::compareTo);
If we compare the imperative style and functional style. We can see the functional code is much more readable and  concise. This is a very small example, it can be used to create max and min functions for any object, given that object implements comparable interface. Complete Code
import java.util.function.BinaryOperator;
import static java.lang.System.out;

public class BinaryOperatorMinByAndMaxBy{
    public static void main(String ... args){
        int num1 = 10;
        int num2 = 1;
      	BinaryOperator<Integer>	minInteger = BinaryOperator.minBy(Integer::compareTo);
    out.println("Minimum := " + minInteger.apply(num1, num2));

        BinaryOperator<Integer>	maxInteger = BinaryOperator.maxBy(Integer::compareTo);
        out.println("Maximum := " + maxInteger.apply(num1, num2));

    }


    private static int maximumWithIfElse(int num1, int num2) {
    int max = num2;
        if(max < num1) {
            max = num1;
        }
        return max;
    }


    private static int minimumWithIfElse(int num1, int num2) {
    int min = num2;
    if(min > num1) {
            min = num1;
    }
        return min;
    }

    private static int maximum(int num1, int num2){
    return num1 > num2 ? num1 : num2;
    }

    private static int minimum(int num1, int num2) {
    return num1 < num2 ? num1 : num2;
    }
}
Output:-
Minimum := 1
Maximum := 10
Thanks for reading. I really hope, that this article was helpful to you. :)