Método LinkedBlockingDeque drenajeTo() en Java con ejemplo

El método DrainTo(Collection col) de LinkedBlockingDeque elimina todos los elementos disponibles de este LinkedBlockingDeque y los agrega a la colección dada pasada como parámetro.

drenajeA(Colección<E> col)

El método DrainTo(Collection<E> col) de LinkedBlockingDeque elimina todos los elementos de este deque y los agrega a la colección col dada. Esta es una forma más eficiente que sondear repetidamente este deque.

También existe la posibilidad de que se produzca un error al intentar agregar elementos a la colección c desde el deque y, debido a ese error, los elementos se distribuyen entre ambas colecciones cuando se lanza la excepción asociada. Si se intenta un deque para drenar a() para deque en sí mismo, se lanzará IllegalArgumentException. Si la colección especificada se modifica mientras la operación está en curso, el comportamiento de esta operación no está definido. Entonces, para usar tales métodos, uno debe cuidar este tipo de situación para superar las excepciones.

Sintaxis:

public int drainTo(Collection<? super E> col)

Parámetro: este método acepta un parámetro col que representa la colección para transferir elementos desde LinkedBlockingDeque.

Valor devuelto: este método devuelve el número de elementos drenados a la colección de deque.

Excepción: este método arroja las siguientes excepciones:

  • UnsupportedOperationException : si la colección no puede agregar elementos.
  • ClassCastException : si la clase del elemento detiene el método para agregar el elemento a la colección.
  • NullPointerException : si la colección es nula
  • IllegalArgumentException : si los argumentos del método impiden que se agregue a la colección especificada

Los siguientes programas ilustran el método de drenaje() de la clase LinkedBlockingDeque:

Programa 1:

El siguiente programa tiene un LinkedBlockingDeque que almacena objetos Employee. Hay una ArrayList que almacenará todos los objetos de empleados de LinkedBlockingDeque. Por lo tanto, DrainTo() se usa con LinkedBlockingDeque para pasar a todos los empleados de deque a ArrayList.

// Java Program Demonstrate drainTo(Collection c)
// method of LinkedBlockingDeque.
  
import java.util.ArrayList;
import java.util.concurrent.LinkedBlockingDeque;
  
public class GFG {
  
    // create a Employee Object with
    // position and salary as an attribute
    public class Employee {
  
        public String name;
        public String position;
        public String salary;
        Employee(String name, String position, String salary)
        {
            this.name = name;
            this.position = position;
            this.salary = salary;
        }
        @Override
        public String toString()
        {
            return "Employee [name=" + name + ", position="
                + position + ", salary=" + salary + "]";
        }
    }
  
    // Main Method
    public static void main(String[] args)
    {
        GFG gfg = new GFG();
        gfg.containsMethodExample();
    }
  
    public void containsMethodExample()
    {
  
        // define capacity of LinkedBlockingDeque
        int capacity = 50;
  
        // create object of LinkedBlockingDeque
        LinkedBlockingDeque<Employee> linkedDeque
            = new LinkedBlockingDeque<Employee>(capacity);
  
        // create a ArrayList to pass as parameter to drainTo()
        ArrayList<Employee> collection
            = new ArrayList<Employee>();
  
        // add Employee object to deque
        Employee emp1 = new Employee("Aman", "Analyst", "24000");
        Employee emp2 = new Employee("Sachin", "Developer", "39000");
        linkedDeque.add(emp1);
        linkedDeque.add(emp2);
  
        // printing Arraylist and deque
        System.out.println("Before drainTo():");
        System.out.println("LinkedBlockingDeque : \n"
                           + linkedDeque.toString());
        System.out.println("ArrayList : \n"
                           + collection);
  
        // Apply drainTo method and pass collection as parameter
        int response = linkedDeque.drainTo(collection);
  
        // print no of element passed
        System.out.println("\nNo of element passed: "
                           + response);
  
        // printing Arraylist and deque
        // after applying drainTo() method
        System.out.println("\nAfter drainTo():");
        System.out.println("LinkedBlockingDeque : \n"
                           + linkedDeque.toString());
        System.out.println("ArrayList : \n"
                           + collection);
    }
}
Producción:

Before drainTo():
LinkedBlockingDeque : 
[Employee [name=Aman, position=Analyst, salary=24000], Employee [name=Sachin, position=Developer, salary=39000]]
ArrayList : 
[]

No of element passed: 2

After drainTo():
LinkedBlockingDeque : 
[]
ArrayList : 
[Employee [name=Aman, position=Analyst, salary=24000], Employee [name=Sachin, position=Developer, salary=39000]]

Programa 2: Programa para mostrar la excepción lanzada por el método DrainTo().

// Java Program Demonstrate
// drainTo(Collection C)
// method of LinkedBlockingDeque.
  
import java.util.ArrayList;
import java.util.concurrent.LinkedBlockingDeque;
  
public class GFG {
  
    public static void main(String[] args)
        throws InterruptedException
    {
        // define capacity of LinkedBlockingDeque
        int capacityOfDeque = 4;
  
        // create object of LinkedBlockingDeque
        LinkedBlockingDeque<Integer> linkedDeque
            = new LinkedBlockingDeque<Integer>(capacityOfDeque);
  
        // add elements to deque
        linkedDeque.put(85461);
        linkedDeque.put(44648);
        linkedDeque.put(45654);
  
        // create a collection with null
        ArrayList<Integer> add = null;
  
        // try to drain null deque to collection
        try {
            linkedDeque.drainTo(add);
        }
        catch (Exception e) {
            System.out.println("Exception: " + e);
        }
    }
}
Producción:

Exception: java.lang.NullPointerException

drenajeA(Colección<? super E> col, int maxElements)

El drenajePara(Colección<? super E> col, int maxElements) se utiliza para transferir elementos de números fijos que se pasan como enteros en drenajePara() a la colección que también se pasa como parámetro al método. Después de transferir los elementos, LinkedBlockingDeque tiene solo aquellos elementos que no se transfieren a la colección. Esta función es la misma que la función anterior con algunas limitaciones para transferir un número fijo de elementos.

Sintaxis:

public int drainTo(Collection<E> col, int maxElements)

Parámetro: El método acepta dos parámetros:

  • col – Representa la colección a transferir elementos desde LinkedBlockingDeque.
  • maxElements : es de tipo entero y se refiere a la cantidad máxima de elementos que se transferirán a la colección.

Valor devuelto: el método devuelve el número de elementos drenados a la colección de deque.

Excepción: este método arroja las siguientes excepciones:

  • UnsupportedOperationException : si la colección no puede agregar elementos.
  • ClassCastException: si la clase del elemento detiene el método para agregar el elemento a la colección.
  • NullPointerException : si la colección es nula
  • IllegalArgumentException : si los argumentos del método impiden que se agregue a la colección especificada

Los siguientes programas ilustran el método de drenaje a (Colección <? super E> col, int maxElements) de la clase LinkedBlockingDeque

Programa 1:

El siguiente programa tiene un LinkedBlockingDeque que almacena objetos de empleados y hay un HashSet en el que almacenará todos los objetos de empleados de LinkedBlockingDeque. Por lo tanto, DrainTo() de LinkedBlockingDeque se usa para pasar algún empleado de deque a ArrayList. Por lo tanto, ningún elemento que se transferirá se pasa en el método como parámetro.

// Java program  to demonstrate drainTo()
// method of LinkedBlockingDeque.
  
import java.util.*;
import java.util.concurrent.LinkedBlockingDeque;
  
public class GFG {
  
    // create an Employee Object with
    // position and salary as attribute
    public class Employee {
  
        public String name;
        public String position;
        public String salary;
        Employee(String name, String position, String salary)
        {
            this.name = name;
            this.position = position;
            this.salary = salary;
        }
        @Override
        public String toString()
        {
            return "Employee [name=" + name + ", "
                + "position=" + position
                + ", salary=" + salary + "]";
        }
    }
  
    // Main Method
    public static void main(String[] args)
    {
        GFG gfg = new GFG();
        gfg.containsMethodExample();
    }
  
    public void containsMethodExample()
    {
  
        // define capacity of LinkedBlockingDeque
        int capacity = 10;
  
        // create object of LinkedBlockingDeque
        LinkedBlockingDeque<Employee> linkedDeque
            = new LinkedBlockingDeque<Employee>(capacity);
  
        // create a HashSet to pass as parameter to drainTo()
        HashSet<Employee> collection
            = new HashSet<Employee>();
  
        // add Employee object to deque
        Employee emp1 = new Employee("Sachin",
                                     "Analyst",
                                     "40000");
        Employee emp2 = new Employee("Aman",
                                     "Developer",
                                     "69000");
        Employee emp3 = new Employee("Kajal",
                                     "Accountant",
                                     "39000");
  
        linkedDeque.add(emp1);
        linkedDeque.add(emp2);
        linkedDeque.add(emp3);
  
        // printing Arraylist and deque
        // before applying drainTo() method
        System.out.println("Before drainTo():");
  
        System.out.println("No of Elements in Deque is "
                           + linkedDeque.size());
  
        System.out.println("Elements in Deque is as follows");
  
        Iterator<Employee> listOfemp
            = linkedDeque.iterator();
        while (listOfemp.hasNext())
            System.out.println(listOfemp.next());
  
        System.out.println("No of Elements in HashSet is "
                           + collection.size());
        System.out.println("Elements in HashSet is as follows:");
        for (Employee emp : collection)
            System.out.println(emp);
  
        // Initialize no of element passed to collection
        // using drainTo() method
        int noOfElement = 2;
  
        // Apply drainTo method
        // and pass collection as parameter
        int response
            = linkedDeque.drainTo(collection, noOfElement);
  
        // print no of element passed
        System.out.println("\nNo of element passed: "
                           + response);
  
        // printing Arraylist and deque
        // after applying drainTo() method
        System.out.println("\nAfter drainTo():");
        System.out.println("No of Elements in Deque is "
                           + linkedDeque.size());
        System.out.println("Elements in Deque is as follows");
        listOfemp = linkedDeque.iterator();
        while (listOfemp.hasNext())
            System.out.println(listOfemp.next());
  
        System.out.println("No of Elements in HashSet is "
                           + collection.size());
        System.out.println("Elements in HashSet is as follows:");
        for (Employee emp : collection)
            System.out.println(emp);
    }
}
Producción:

Before drainTo():
No of Elements in Deque is 3
Elements in Deque is as follows
Employee [name=Sachin, position=Analyst, salary=40000]
Employee [name=Aman, position=Developer, salary=69000]
Employee [name=Kajal, position=Accountant, salary=39000]
No of Elements in HashSet is 0
Elements in HashSet is as follows:

No of element passed: 2

After drainTo():
No of Elements in Deque is 1
Elements in Deque is as follows
Employee [name=Kajal, position=Accountant, salary=39000]
No of Elements in HashSet is 2
Elements in HashSet is as follows:
Employee [name=Sachin, position=Analyst, salary=40000]
Employee [name=Aman, position=Developer, salary=69000]

Publicación traducida automáticamente

Artículo escrito por ProgrammerAnvesh 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 *