Repository: groovy
Updated Branches:
  refs/heads/master ae51fc62b -> 3992c4d20


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


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

Branch: refs/heads/master
Commit: 3992c4d2050de01674611809d9fe8c17aaa98026
Parents: ae51fc6
Author: Daniel Sun <[email protected]>
Authored: Wed Jan 24 08:40:03 2018 +0800
Committer: sunlan <[email protected]>
Committed: Wed Jan 24 11:32:23 2018 +0800

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


http://git-wip-us.apache.org/repos/asf/groovy/blob/3992c4d2/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 6c15626..973d856 100644
--- 
a/src/main/java/org/codehaus/groovy/vmplugin/v8/PluginDefaultGroovyMethods.java
+++ 
b/src/main/java/org/codehaus/groovy/vmplugin/v8/PluginDefaultGroovyMethods.java
@@ -22,9 +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
@@ -51,21 +55,45 @@ 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) {
-        return stream.collect(Collectors.toList());
+        return stream.collect(Collectors.<T>toList());
     }
 
     /**
      * 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) {
-        return stream.collect(Collectors.toSet());
+        return stream.collect(Collectors.<T>toSet());
+    }
+
+    /**
+     * 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());
     }
 
     /**

http://git-wip-us.apache.org/repos/asf/groovy/blob/3992c4d2/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