Repository: groovy
Updated Branches:
  refs/heads/GROOVY_2_5_X 31e6d8907 -> f19826ba5


Add DGM `toList` and `toSet` to `BaseStream`(closes #658)

(cherry picked from commit 9736ceb)


Project: http://git-wip-us.apache.org/repos/asf/groovy/repo
Commit: http://git-wip-us.apache.org/repos/asf/groovy/commit/f19826ba
Tree: http://git-wip-us.apache.org/repos/asf/groovy/tree/f19826ba
Diff: http://git-wip-us.apache.org/repos/asf/groovy/diff/f19826ba

Branch: refs/heads/GROOVY_2_5_X
Commit: f19826ba5b978f887f2136187d0afa356678b576
Parents: 31e6d89
Author: Daniel Sun <[email protected]>
Authored: Wed Jan 24 08:40:03 2018 +0800
Committer: sunlan <[email protected]>
Committed: Wed Jan 24 11:39:17 2018 +0800

----------------------------------------------------------------------
 .../vmplugin/v8/PluginDefaultGroovyMethods.java | 33 ++++++++++++++++++--
 .../v8/PluginDefaultGroovyMethodsTest.groovy    | 14 +++++++++
 2 files changed, 45 insertions(+), 2 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/groovy/blob/f19826ba/src/main/java/org/codehaus/groovy/vmplugin/v8/PluginDefaultGroovyMethods.java
----------------------------------------------------------------------
diff --git 
a/src/main/java/org/codehaus/groovy/vmplugin/v8/PluginDefaultGroovyMethods.java 
b/src/main/java/org/codehaus/groovy/vmplugin/v8/PluginDefaultGroovyMethods.java
index b7100d3..4114a76 100644
--- 
a/src/main/java/org/codehaus/groovy/vmplugin/v8/PluginDefaultGroovyMethods.java
+++ 
b/src/main/java/org/codehaus/groovy/vmplugin/v8/PluginDefaultGroovyMethods.java
@@ -22,8 +22,13 @@ import java.util.Arrays;
 import java.util.List;
 import java.util.Optional;
 import java.util.Set;
+import java.util.Spliterator;
+import java.util.Spliterators;
+import java.util.stream.BaseStream;
 import java.util.stream.Collectors;
+import java.util.stream.IntStream;
 import java.util.stream.Stream;
+import java.util.stream.StreamSupport;
 
 /**
  * Defines new Groovy methods which appear on normal JDK 8
@@ -50,7 +55,7 @@ public class PluginDefaultGroovyMethods {
     /**
      * Accumulates the elements of stream into a new List.
      * @param stream the Stream
-     * @param <T>
+     * @param <T> the type of element
      * @return a new {@code java.util.List} instance
      */
     public static <T> List<T> toList(Stream<T> stream) {
@@ -60,7 +65,7 @@ public class PluginDefaultGroovyMethods {
     /**
      * Accumulates the elements of stream into a new Set.
      * @param stream the Stream
-     * @param <T>
+     * @param <T> the type of element
      * @return a new {@code java.util.Set} instance
      */
     public static <T> Set<T> toSet(Stream<T> stream) {
@@ -68,6 +73,30 @@ public class PluginDefaultGroovyMethods {
     }
 
     /**
+     * Accumulates the elements of stream into a new List.
+     * @param stream the {@code java.util.stream.BaseStream}
+     * @param <T> the type of element
+     * @return a new {@code java.util.List} instance
+     */
+    public static <T> List<T> toList(BaseStream<T, ? extends BaseStream> 
stream) {
+        return StreamSupport.stream(
+                        Spliterators.spliteratorUnknownSize(stream.iterator(), 
Spliterator.ORDERED),
+                false).collect(Collectors.<T>toList());
+    }
+
+    /**
+     * Accumulates the elements of stream into a new Set.
+     * @param stream the {@code java.util.stream.BaseStream}
+     * @param <T> the type of element
+     * @return a new {@code java.util.Set} instance
+     */
+    public static <T> Set<T> toSet(BaseStream<T, ? extends BaseStream> stream) 
{
+        return StreamSupport.stream(
+                Spliterators.spliteratorUnknownSize(stream.iterator(), 
Spliterator.ORDERED),
+                false).collect(Collectors.<T>toSet());
+    }
+
+    /**
      * Returns a sequential {@link Stream} with the specified array as its
      * source.
      *

http://git-wip-us.apache.org/repos/asf/groovy/blob/f19826ba/src/test/org/codehaus/groovy/vmplugin/v8/PluginDefaultGroovyMethodsTest.groovy
----------------------------------------------------------------------
diff --git 
a/src/test/org/codehaus/groovy/vmplugin/v8/PluginDefaultGroovyMethodsTest.groovy
 
b/src/test/org/codehaus/groovy/vmplugin/v8/PluginDefaultGroovyMethodsTest.groovy
index 2f48a10..ae5e96b 100644
--- 
a/src/test/org/codehaus/groovy/vmplugin/v8/PluginDefaultGroovyMethodsTest.groovy
+++ 
b/src/test/org/codehaus/groovy/vmplugin/v8/PluginDefaultGroovyMethodsTest.groovy
@@ -56,6 +56,20 @@ class PluginDefaultGroovyMethodsTest extends 
StaticTypeCheckingTestCase {
         '''
     }
 
+    void testBaseStreamToList() {
+        assertScript '''
+            def list = [1, 2, 3]
+            assert list == Arrays.stream(list as int[]).toList()
+        '''
+    }
+
+    void testBaseStreamToSet() {
+        assertScript '''
+            def set = [1, 2, 3] as Set
+            assert set.sort() == Arrays.stream(set as int[]).toSet().sort()
+        '''
+    }
+
     void testObjectArrayToStream() {
         assertScript '''
             def array = ["Hello", "World"] as Object[]

Reply via email to