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[]
