当前位置: 首页>>代码示例 >>用法及示例精选 >>正文


Java LinkedBlockingDeque drainTo()用法及代码示例


LinkedBlockingDeque的drainTo(Collection col)方法从此LinkedBlockingDeque中删除所有可用元素,并将它们添加到作为参数传递的给定集合中。

rainTo(Collection col)

LinkedBlockingDeque的drainTo(Collection col)方法从此双端队列中删除所有元素,并将它们添加到给定的collect col中。与重复轮询此双端队列相比,这是一种更有效的方法。

尝试从双端队列将元素添加到集合c时,也可能会遇到失败,并且由于该失败,当引发关联的异常时,元素会在两个集合之间分配。如果尝试使用双端队列使drainTo()自身进行双端队列,则将抛出IllegalArgumentException。如果在操作进行过程中修改了指定的集合,则此操作的行为是不确定的。因此,使用这种方法时,需要注意这种情况以克服异常。


用法:

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

参数:此方法接受一个参数col,该参数表示要从LinkedBlockingDeque传输元素的集合。

返回值:此方法返回从双端队列耗尽到集合的元素数。

异常:此方法引发以下异常:

  • UnsupportedOperationException–如果collection无法添加元素。
  • ClassCastException–如果元素类停止将元素添加到集合的方法。
  • NullPointerException –如果集合为空
  • IllegalArgumentException–如果方法的参数阻止将其添加到指定的集合中

以下示例程序旨在说明LinkedBlockingDeque类的drainTo()方法:

示例1:

下面的程序有一个存储员工对象的LinkedBlockingDeque。有一个ArrayList,它将存储LinkedBlockingDeque中的所有雇员对象。因此,将drainTo()与LinkedBlockingDeque一起使用,将所有员工从双端队列传递到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); 
    } 
}
输出:
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]]

示例2:该程序显示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); 
        } 
    } 
}
输出:
Exception: java.lang.NullPointerException

rainageTo(Collection super E> col,int maxElements)

用于将固定数量的元素(它在drainTo()中作为整数传递)传递给collection(也作为参数传递给方法)的rainingTo(Collection super E> col,int maxElements)。传输元素后,LinkedBlockingDeque仅具有那些未传输到集合的元素。此函数与上述函数相同,但在转移固定元素数量方面存在一些限制。

用法:

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

参数:该方法接受两个参数:

  • col–它表示从LinkedBlockingDeque传输元素的集合。
  • maxElements–这是整数类型,是指要传输到集合的最大元素数。

返回值:该方法返回从双端队列耗尽到集合的元素数。

异常:此方法引发以下异常:

  • UnsupportedOperationException–如果collection无法添加元素。
  • ClassCastException-if元素类的stop方法将元素添加到集合中。
  • NullPointerException –如果集合为空
  • IllegalArgumentException–如果方法的参数阻止将其添加到指定的集合中

以下示例程序旨在说明LinkedBlockingDeque类的排水到(收集超级E> col,int maxElements)方法

示例1:

下面的程序有一个LinkedBlockingDeque,它存储Employee对象,还有一个HashSet,它将存储LinkedBlockingDeque中的所有雇员对象。因此,LinkedBlockingDeque的drainTo()用于将某些雇员从双端队列传递到ArrayList。因此,没有要传递的元素作为参数传递给方法。

// 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); 
    } 
}
输出:
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]


相关用法


注:本文由纯净天空筛选整理自ProgrammerAnvesh大神的英文原创作品 LinkedBlockingDeque drainTo() method in Java with Example。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。