Método PriorityBlockingQueue DrainTo() en Java

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

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

El método DrainTo(Collection<? super E> col) de PriorityBlockingQueue elimina todos los elementos de esta cola y los agrega a la columna de colección dada. Esta es una forma más eficiente que sondear repetidamente esta cola.
También existe la posibilidad de que se produzca un error al intentar agregar elementos a la colección c desde la cola y, debido a ese error, los elementos se distribuyen entre ambas colecciones cuando se lanza la excepción asociada. Si se intenta drenar una cola() para ponerse en cola, 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 de PriorityBlockingQueue.
Valor devuelto: este método devuelve el número de elementos drenados a la colección de la cola.
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() de la clase PriorityBlockingQueue:
Ejemplo 1: Programa para demostrar el método de drenaje a() en PriorityBlockingQueue que contiene una lista de números a una ArrayList.
 

Java

// Java Program Demonstrate drainTo()
// method of PriorityBlockingQueue
 
import java.util.concurrent.PriorityBlockingQueue;
import java.util.*;
public class GFG {
 
    public static void main(String[] args)
    {
        // define capacity of PriorityBlockingQueue
        int capacityOfQueue = 5;
 
        // create object of PriorityBlockingQueue
        PriorityBlockingQueue<Integer> PrioQueue
            = new PriorityBlockingQueue<Integer>(capacityOfQueue);
 
        // Add numbers to PriorityBlockingQueue
        PrioQueue.put(7855642);
        PrioQueue.put(35658786);
        PrioQueue.put(5278367);
        PrioQueue.put(74381793);
        PrioQueue.put(76487590);
        PrioQueue.put(87625142);
 
        // create a ArrayList of Integers
        ArrayList<Integer> list = new ArrayList<Integer>();
 
        // drain all elements of PriorityBlockingQueue to ArrayList
        // Using drainTo() method
        int noOfElementDrained = PrioQueue.drainTo(list);
 
        // print details
        System.out.println("No of elements drained :" + noOfElementDrained);
        System.out.println("ArrayList Contains element");
 
        for (int i : list)
            System.out.println(i);
    }
}
Producción: 

No of elements drained :6
ArrayList Contains element
5278367
7855642
35658786
74381793
76487590
87625142

 

Ejemplo 2: 
el programa a continuación demuestra la excepción lanzada por el método de drenaje(). 
 

Java

// Java Program Demonstrate drainTo()
// method of PriorityBlockingQueue
 
import java.util.concurrent.PriorityBlockingQueue;
import java.util.*;
public class GFG {
 
    public static void main(String[] args)
    {
        // define capacity of PriorityBlockingQueue
        int capacityOfQueue = 5;
 
        // create object of PriorityBlockingQueue which contains
        // name of students
        PriorityBlockingQueue<String> names
            = new PriorityBlockingQueue<String>(capacityOfQueue);
 
        // Add names of students of girls college
        names.add("Joyita");
        names.add("Priyanka");
        names.add("Joydeep");
 
        // create a collection with null
        ArrayList<String> collection = null;
 
        // try to drain to collection equals to null
        try {
            names.drainTo(collection);
        }
        catch (Exception e) {
            System.out.println("Exception Thrown: " + e);
        }
    }
}
Producción: 

Exception Thrown: 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, PriorityBlockingQueue 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<? super E> col, int maxElements)

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

  • col – Representa la colección para transferir elementos de PriorityBlockingQueue.
  • 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 la cola.
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 drenajePara(Colección<? super E> col, int maxElements) de la clase PriorityBlockingQueue:
Ejemplo 1: Programa para demostrar el método de drenajePara(Colección<? super E> c, int maxElements) en PriorityBlockingQueue que contiene una lista de números para una ArrayList y solo vamos a transferir 3 elementos.
 

Java

// Java Program Demonstrate drainTo()
// method of PriorityBlockingQueue
 
import java.util.concurrent.PriorityBlockingQueue;
import java.util.*;
public class GFG {
 
    public static void main(String[] args)
    {
        // define capacity of PriorityBlockingQueue
        int capacityOfQueue = 5;
 
        // create object of PriorityBlockingQueue
        PriorityBlockingQueue<Integer> PrioQueue
            = new PriorityBlockingQueue<Integer>(capacityOfQueue);
 
        // Add numbers to PriorityBlockingQueue
        PrioQueue.put(7855642);
        PrioQueue.put(35658786);
        PrioQueue.put(5278367);
        PrioQueue.put(74381793);
        PrioQueue.put(76487590);
        PrioQueue.put(87625142);
 
        // create maxElement variable
        // Contains no of elements we want to transfer
        int maxElement = 3;
 
        // create a ArrayList of Integers
        ArrayList<Integer> list = new ArrayList<Integer>();
 
        // drain all elements of PriorityBlockingQueue to ArrayList
        // Using drainTo() method
        int noOfElementDrained = PrioQueue.drainTo(list, maxElement);
 
        // print details
        System.out.println("ArrayList Contains element");
 
        for (int i : list)
            System.out.println(i);
    }
}
Producción: 

ArrayList Contains element
5278367
7855642
35658786

 

Ejemplo 2: 
el siguiente programa demuestra el método de drenaje a (Colección <? super E> c, int maxElements) en la lista de nombres y transfiere dos nombres a una lista de array e imprime la lista. 
 

Java

// Java Program Demonstrate drainTo()
// method of PriorityBlockingQueue
 
import java.util.concurrent.PriorityBlockingQueue;
import java.util.*;
public class GFG {
 
    public static void main(String[] args)
    {
        // define capacity of PriorityBlockingQueue
        int capacityOfQueue = 5;
 
        // create object of PriorityBlockingQueue which contains
        // name of students
        PriorityBlockingQueue<String> names
            = new PriorityBlockingQueue<String>(capacityOfQueue);
 
        // Add names of students of girls college
        names.add("Joyita");
        names.add("Priyanka");
        names.add("Ravi");
        names.add("Suraj");
 
        // create maxElement variable
        // Contains no of elements we want to transfer
        // here we want to transfer only two names
        int maxElement = 2;
 
        // create a collection with null
        ArrayList<String> collection = new ArrayList<String>();
 
        // drain all elements of PriorityBlockingQueue to ArrayList
        // Using drainTo() method
        int noOfElementDrained = names.drainTo(collection, maxElement);
 
        // print details
        System.out.println("ArrayList Contains element");
 
        int i = 0;
        for (String str : collection) {
            System.out.println("Element " + i + " : " + str);
            i++;
        }
    }
}
Producción: 

ArrayList Contains element
Element 0 : Joyita
Element 1 : Priyanka

 

Referencia: 
 

Publicación traducida automáticamente

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