Java 8 | Interfaz BiConsumer en Java con ejemplos

La interfaz BiConsumer es parte del paquete java.util.function que se introdujo desde Java 8 para implementar la programación funcional en Java. Representa una función que toma dos argumentos y produce un resultado. Sin embargo, este tipo de funciones no devuelve ningún valor.

Esta interfaz funcional admite dos genéricos, a saber: – 

  • T : denota el tipo del primer argumento de entrada a la operación
  • U : denota el tipo del segundo argumento de entrada a la operación

La expresión lambda asignada a un objeto de tipo BiConsumer se usa para definir su accept() que eventualmente aplica la operación dada a sus argumentos. 

Los BiConsumers son útiles cuando no se requiere devolver ningún valor, ya que se espera que operen a través de efectos secundarios. 

Funciones en la interfaz BiConsumer

La interfaz de BiConsumer consta de las siguientes dos funciones:

1. aceptar()

Este método acepta dos valores y realiza la operación en los argumentos dados

Sintaxis:  

void accept(T t, U u)

Parámetros: Este método toma dos parámetros:  

  • t – el primer argumento de entrada
  • u – el segundo argumento de entrada

Devoluciones: este método no devuelve ningún valor.

A continuación se muestra el código para ilustrar el método accept():

Programa 1: Programa para comparar 2 listas de enteros usando el método accept() de BiConsumer: 

Java

// Java Program to demonstrate
// BiConsumer's accept() method
 
import java.util.ArrayList;
import java.util.List;
import java.util.function.BiConsumer;
 
public class GFG {
    public static void main(String args[])
    {
 
        // Create the first list
        List<Integer> lista = new ArrayList<Integer>();
        lista.add(2);
        lista.add(1);
        lista.add(3);
 
        // Create the second list
        List<Integer> listb = new ArrayList<Integer>();
        listb.add(2);
        listb.add(1);
        listb.add(2);
 
        // BiConsumer to compare both lists
        BiConsumer<List<Integer>, List<Integer> >
            equals = (list1, list2) ->
        {
            if (list1.size() != list2.size()) {
                System.out.println("False");
            }
            else {
                for (int i = 0; i < list1.size(); i++)
                    if (list1.get(i) != list2.get(i)) {
                        System.out.println("False");
                        return;
                    }
                System.out.println("True");
            }
        };
        equals.accept(lista, listb);
    }
}
Producción: 

False

 

2. y entonces()

Devuelve un BiConsumer compuesto donde el BiConsumer parametrizado se ejecutará después del primero. Si la evaluación de cualquiera de las operaciones arroja un error, se transmite al llamador de la operación compuesta.

Nota: La operación que se pasa como argumento debe ser del tipo BiConsumer.

Sintaxis:  

default BiConsumer <T, U> 
        andThen(BiConsumer<? super T, ? super U> after)

Parámetros: Este método acepta un parámetro tras el cual se encuentra el BiConsumer a aplicar tras el actual.
Valor devuelto: este método devuelve un BiConsumer compuesto que primero aplica la operación actual primero y luego la operación posterior.

Excepción: este método arroja NullPointerException si la operación posterior es nula.

A continuación se muestra el código para ilustrar el método andThen():

Programa 1: 

Java

// Java Program to demonstrate
// BiConsumer's andThen() method
 
import java.util.ArrayList;
import java.util.List;
import java.util.function.BiConsumer;
 
public class Main {
    public static void main(String args[])
    {
 
        // Create first list
        List<Integer> lista = new ArrayList<Integer>();
        lista.add(2);
        lista.add(1);
        lista.add(3);
 
        // Create second list
        List<Integer> listb = new ArrayList<Integer>();
        listb.add(2);
        listb.add(1);
        listb.add(2);
 
        // BiConsumer to compare 2 lists of integers
        BiConsumer<List<Integer>, List<Integer> > equals = (list1, list2) ->
        {
            if (list1.size() != list2.size()) {
                System.out.println("False");
            }
            else {
                for (int i = 0; i < list1.size(); i++)
                    if (list1.get(i) != list2.get(i)) {
                        System.out.println("False");
                        return;
                    }
                System.out.println("True");
            }
        };
 
        // BiConsumer to print 2 lists
        BiConsumer<List<Integer>, List<Integer> > disp = (list1, list2) ->
        {
            list1.stream().forEach(a -> System.out.print(a + " "));
            System.out.println();
            list2.stream().forEach(a -> System.out.print(a + " "));
            System.out.println();
        };
 
        // Using addThen() method
        equals.andThen(disp).accept(lista, listb);
    }
}
Producción: 

False
2 1 3 
2 1 2

 

Programa 2: para demostrar cuándo se devuelve NullPointerException .

Java

// Java Program to demonstrate
// BiConsumer's andThen() method
 
import java.util.ArrayList;
import java.util.List;
import java.util.function.BiConsumer;
 
public class Main {
    public static void main(String args[])
    {
 
        // Create first list
        List<Integer> lista = new ArrayList<Integer>();
        lista.add(2);
        lista.add(1);
        lista.add(3);
 
        // Create second list
        List<Integer> listb = new ArrayList<Integer>();
        listb.add(2);
        listb.add(1);
        listb.add(2);
 
        // BiConsumer to compare 2 lists of integers
        BiConsumer<List<Integer>, List<Integer> > equals = (list1, list2) ->
        {
            if (list1.size() != list2.size()) {
                System.out.println("False");
            }
            else {
                for (int i = 0; i < list1.size(); i++)
                    if (list1.get(i) != list2.get(i)) {
                        System.out.println("False");
                        return;
                    }
                System.out.println("True");
            }
        };
 
        // BiConsumer to print 2 lists
        BiConsumer<List<Integer>, List<Integer> > disp = (list1, list2) ->
        {
            list1.stream().forEach(a -> System.out.print(a + " "));
            System.out.println();
            list2.stream().forEach(a -> System.out.print(a + " "));
            System.out.println();
        };
 
        try {
            equals.andThen(null).accept(lista, listb);
        }
        catch (Exception e) {
            System.out.println("Exception : " + e);
        }
    }
}
Producción

Exception : java.lang.NullPointerException

Programa 3: para demostrar cómo se devuelve y maneja una excepción después de la función.

Java

// Java Program to demonstrate
// BiConsumer's andThen() method
 
import java.util.ArrayList;
import java.util.List;
import java.util.function.BiConsumer;
 
public class Main {
    public static void main(String args[])
    {
 
        // Create first list
        List<Integer> lista = new ArrayList<Integer>();
        lista.add(2);
        lista.add(1);
        lista.add(3);
 
        // Create second list
        List<Integer> listb = new ArrayList<Integer>();
        listb.add(2);
        listb.add(1);
 
        // BiConsumer to compare 2 lists of integers
        BiConsumer<List<Integer>, List<Integer> > equals = (list1, list2) ->
        {
            for (int i = 0; i < list1.size(); i++)
                if (list1.get(i) != list2.get(i)) {
                    System.out.println("False");
                    return;
                }
            System.out.println("True");
        };
 
        // BiConsumer to print 2 lists
        BiConsumer<List<Integer>, List<Integer> > disp = (list1, list2) ->
        {
            list1.stream().forEach(a -> System.out.print(a + " "));
            System.out.println();
            list2.stream().forEach(a -> System.out.print(a + " "));
            System.out.println();
        };
 
        try {
            disp.andThen(equals).accept(lista, listb);
        }
        catch (Exception e) {
            System.out.println("Exception : " + e);
        }
    }
}
Producción

2 1 3 
2 1 
Exception : java.lang.IndexOutOfBoundsException: Index 2 out of bounds for length 2

Publicación traducida automáticamente

Artículo escrito por psil123 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *