Skip to main content

Consumer and Biconsumer In Java 8 | accept and andThen() method

What is Consumer and BiConsumer in Java?

Consumer and Biconsumer In Java 8

Consumer in Java

Consumer is Functional Interface which takes arguments only and return nothing.

Consumer is Interface in Java Programming language which introduced in Java 8 and it is part of java.util.function.

As a name suggest, it only consumes not return anything. means it consumes value and perform required operations.

@FunctionalInterface
public interface Consumer<T> {
  void accept(T t);
}

Consumer only contains two methods : one is abstract and another is default.

  1. void accept (T t) 
  2. default Consumer<T> andThen(Consumer<? super T> after)

You can see return type of accept method is void means it does not return anything.

Consumer can be used in all contexts where an object needs to be consumed, Like taken as input, and some operation is to be performed on the object without returning any result.

Since Consumer is a functional interface, hence it can be used as the assignment target for a lambda expression or a method reference.

Consumer only takes one parameter. Lets see simple demo of consumer. 

Example 1 : Print String and Number using Consumer

public class ConsumerDemo {
    
    public static void main(String[] args) {
    
        // Print string values.
        Consumer<String> stringConsumer = str -> {
            System.out.println(str);
        };
       
        stringConsumer.accept("Welcome to Programming Blog");
       
        // Print Integer values.
        Consumer<Integer> integerConsumer = number -> {
            System.out.println(number);
        };
       
        integerConsumer.accept(123);
    }
}

Output :

Welcome to Programming Blog
123

Lest see another simple example of consumer.

Example 2 : Print Object properties using Consumer

import java.util.function.Consumer;

public class ConsumerDemo {
    
    public static void main(String[] args) {
       
        Customer customer = new Customer("abcd", 123456789);
        customerInfoConsumer.accept(customer);
    }
    
    // Consumer
    static Consumer<Customer> customerInfoConsumer = customer ->
        System.out.println("Customer Name: " + customer.customerName + "\nCustomer Number:  " + customer.customerNumber);
    
       
    static class Customer {
        private final String customerName;
        private final int customerNumber;

        public Customer(String customerName, int customerNumber) {
            this.customerName = customerName;
            this.customerNumber = customerNumber;
        }
       
    }
}

Output :

Customer Name: abcd
Customer Number: 123456789

We have seen how to use accept() method now lets see how to use andThen() method in code.

Example 3 : Consumer andThen() method 

import java.util.function.Consumer; 

public class ConsumerDemo {

    public static void main(String[] args) {
        
         Consumer<String> first = a
            -> System.out.println("Hello");
        
         Consumer<String> second = b
            -> System.out.println(b);

         first.andThen(second).accept("Programmers");
        
    }

}

Output :

Hello
Programmers

 

BiConsumer in Java

As a name suggest, BiConsumer takes two arguments and does not return anything.

Same as Consumer BiConsumer contains only two methods :

  1. void accept(T t, U u)
  2. default BiConsumer<T,U> andThen(BiConsumer<? super T,? super U> after)

 Lets see example of BiConsumer :

Example 3 : Sum of two number using BiConsumer

import java.util.function.BiConsumer;

public class ConsumerDemo {
    
    public static void main(String[] args) {
       
        BiConsumer<Integer, Integer> biConsumer = (value1, value2)
-> System.out.println("Sum of two number : " +(value1+value2));

biConsumer.accept(10, 10);        
       
    }
}

Output :

Sum of two number : 20

Example 5 : Print map values using BiConsumer

public class ConsumerDemo {
    
    static void Print(Map<Integer, String> map, String name){ 
       
        System.out.println(name);

        map.forEach((key, val)->System.out.println(key+" "+val)); 
    } 
    
    public static void main(String[] args) {
       
        Map<Integer, String> map = new HashMap<Integer,String>();  
        map.put(65, "A");  
        map.put(66, "B");  
        map.put(67, "C");  
        map.put(68, "D");
        map.put(69, "E");
        
        // Referring method  
        BiConsumer<Map<Integer, String>, String> biCon = ConsumerDemo::Print;  
        biCon.accept(map, "ASCII Characters");  
       
    }
}

Output :

ASCII Characters
65 A
66 B
67 C
68 D
69 E

Example 6 : BiConsumer andThen() method

import java.util.function.BiConsumer;

public class ConsumerDemo {

    public static void main(String[] args) {
        
        BiConsumer<Integer, Integer> first = (a,b)
    
        -> System.out.println("Multiplication : " +10 * 10);
        
    
    BiConsumer<Integer, Integer> second = (c,d)
    
        -> System.out.println("Addition is : "+(c + d));

        first.andThen(second).accept(5,5);
        
    }

}

Output :

Multiplication : 100
Addition is : 10

 

Happy Coding.

Other Java 8 related articles :

Predicate and BiPredicate in Java 8 with Examples

Comments

Popular posts from this blog

Plus Minus HackerRank Solution in Java | Programming Blog

Java Solution for HackerRank Plus Minus Problem Given an array of integers, calculate the ratios of its elements that are positive , negative , and zero . Print the decimal value of each fraction on a new line with 6 places after the decimal. Example 1 : array = [1, 1, 0, -1, -1] There are N = 5 elements, two positive, two negative and one zero. Their ratios are 2/5 = 0.400000, 2/5 = 0.400000 and 1/5 = 0.200000. Results are printed as:  0.400000 0.400000 0.200000 proportion of positive values proportion of negative values proportion of zeros Example 2 : array = [-4, 3, -9, 0, 4, 1]  There are 3 positive numbers, 2 negative numbers, and 1 zero in array. Following is answer : 3/6 = 0.500000 2/6 = 0.333333 1/6 = 0.166667 Lets see solution Solution 1 import java.io.*; import java.math.*; import java.security.*; import java.text.*; import java.util.*; import java.util.concurrent.*; import java.util.function.*; import java.util.regex.*; import java.util.stream.*; import static java.util.st

Flipping the Matrix HackerRank Solution in Java with Explanation

Java Solution for Flipping the Matrix | Find Highest Sum of Upper-Left Quadrant of Matrix Problem Description : Sean invented a game involving a 2n * 2n matrix where each cell of the matrix contains an integer. He can reverse any of its rows or columns any number of times. The goal of the game is to maximize the sum of the elements in the n *n submatrix located in the upper-left quadrant of the matrix. Given the initial configurations for q matrices, help Sean reverse the rows and columns of each matrix in the best possible way so that the sum of the elements in the matrix's upper-left quadrant is maximal.  Input : matrix = [[1, 2], [3, 4]] Output : 4 Input : matrix = [[112, 42, 83, 119], [56, 125, 56, 49], [15, 78, 101, 43], [62, 98, 114, 108]] Output : 119 + 114 + 56 + 125 = 414 Full Problem Description : Flipping the Matrix Problem Description   Here we can find solution using following pattern, So simply we have to find Max of same number of box like (1,1,1,1). And last