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