Friday, August 17, 2018

Java8 - BinaryOperator interface examples | Functional Interface tutorials

BinaryOperator is an interface defined in java.util.function package of java8. This interface extends BiFunction interface. This can be assigned with Lamda expressions/method references This performs an operation that accepts two parameters of the same type and returns the same type value as a result. In this post, We are going to learn BinaryOperator interface and it's method usage and examples. 
public interface BinaryOperator<T> extends BiFunction<T,T,T> {
public static <T> BinaryOperator<T> minBy(Comparator<? super T> comparator)
public static <T> BinaryOperator<T> maxBy(Comparator<? super T> comparator) 
There is no direct abstract method in this. Two static methods - minBy, maxBy are defined in BinaryOperator. BiFunction has a single abstract method - R apply(T t, U u);

 Lambda Expression Example 

Lambda expression has only two parameters - (v1, v2) and Lambda expression is assigned to BinaryOperator function
BinaryOperator<Integer> sum = (v1, v2) -> v1 + v2;
		System.out.println(sum.apply(50, 70));
		BinaryOperator<String> appendString = (str1, str2) -> str1 + str2;
		System.out.println(appendString.apply("Binary ", "Operator Example "));
Output of the above code is
Binary Operator Example 

Method reference example 

a static method is declared and this method is called using a double colon:: operator. The below is an example code for method reference usage
package org.cloudhadoop.functions;
import java.util.function.BinaryOperator;
public class MyBinaryOperatorExample {
	public static Integer sum(int m,int n) {
	     return m+n;
	public static void main(String[] args) {
		  //  lambda expression Example
		BinaryOperator<Integer> sum=(v1, v2) ->sum(v1 , v2);
		System.out.println(sum.apply(50, 70));
		  //  Method reference Example
		BinaryOperator<Integer> sum1= MyBinaryOperatorExample::sum;
Output is

Static minBy() method Example 

minBy() method is a static method defined in java.util.function.BinaryOperator class.  It returns Binary Operator which works in return low of given value based on the provided comparator
BinaryOperator<Integer> naturalOrderMin = BinaryOperator.minBy(
Comparator.naturalOrder()); // Natural Order Comparator passed
BinaryOperator<Integer> reverseOrderMin = BinaryOperator.minBy(
Comparator.reverseOrder()); // Reverse Order Comparator passed
System.out.println(naturalOrderMin.apply(50, 45));
System.out.println(reverseOrderMin.apply(50, 45));
Output is

maxBy() method Example

It is a static method which returns BinaryOperator - which does a maximum of given values with comparator provided
BinaryOperator<Integer> naturalOrderMax = BinaryOperator.maxBy(
BinaryOperator<Integer> reverseOrderMax = BinaryOperator.maxBy(
System.out.println(naturalOrderMax.apply(50, 45));
System.out.println(reverseOrderMax.apply(50, 45));
Output of above code is

Related article