This is an automated email from the ASF dual-hosted git repository.

paulk pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/groovy.git


The following commit(s) were added to refs/heads/master by this push:
     new c3c909ca5d GROOVY-11650: Create drain extension method for Queues
c3c909ca5d is described below

commit c3c909ca5d0b3b53ccb81582b102dedb29626cf6
Author: Paul King <[email protected]>
AuthorDate: Sun May 4 14:57:00 2025 +1000

    GROOVY-11650: Create drain extension method for Queues
---
 .../groovy/runtime/DefaultGroovyMethods.java       | 25 ++++++++++++++++++++++
 1 file changed, 25 insertions(+)

diff --git 
a/src/main/java/org/codehaus/groovy/runtime/DefaultGroovyMethods.java 
b/src/main/java/org/codehaus/groovy/runtime/DefaultGroovyMethods.java
index 761ccb6c2f..c47078861e 100644
--- a/src/main/java/org/codehaus/groovy/runtime/DefaultGroovyMethods.java
+++ b/src/main/java/org/codehaus/groovy/runtime/DefaultGroovyMethods.java
@@ -4094,6 +4094,31 @@ public class DefaultGroovyMethods extends 
DefaultGroovyMethodsSupport {
                         ") to downto() cannot be greater than the value (" + 
self + ") it's called on.");        }
     }
 
+    
//--------------------------------------------------------------------------
+    // drain
+
+    /**
+     * Drain the queue of elements, returning them as a list.
+     * <pre class="groovyTestCase">
+     * def letters = new PriorityQueue(String.CASE_INSENSITIVE_ORDER)
+     * letters.addAll(['Z', 'y', 'X', 'a', 'B', 'c'])
+     * assert letters.toList() == ['a', 'B', 'c', 'Z', 'X', 'y']
+     * assert letters.drain() == ['a', 'B', 'c', 'X', 'y', 'Z']
+     * assert letters.empty
+     * </pre>
+     *
+     * @param self a Queue
+     * @return a List of elements removed from the head of the queue
+     * @since 5.0.0
+     */
+    public static <T> List<T> drain(Queue<T> self) {
+        List<T> answer = new ArrayList<>();
+        while (!self.isEmpty()) {
+            answer.add(self.poll());
+        }
+        return answer;
+    }
+
     
//--------------------------------------------------------------------------
     // drop
 

Reply via email to