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); } }
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); } } }
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); } }
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++; } } }
ArrayList Contains element Element 0 : Joyita Element 1 : Priyanka
Referencia:
- https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/PriorityBlockingQueue.html#drainTo-java.util.Collection-
- https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/PriorityBlockingQueue.html#drainTo-java.util.Collection-int-
Publicación traducida automáticamente
Artículo escrito por AmanSingh2210 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA