You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@groovy.apache.org by em...@apache.org on 2020/05/08 19:55:43 UTC
[groovy] 01/01: GROOVY-9545: add extension method for stream->array
using class literal
This is an automated email from the ASF dual-hosted git repository.
emilles pushed a commit to branch GROOVY-9545
in repository https://gitbox.apache.org/repos/asf/groovy.git
commit 8423bfbb27fdf2bf3a18726a276c929df345e29a
Author: Eric Milles <er...@thomsonreuters.com>
AuthorDate: Fri May 8 14:41:00 2020 -0500
GROOVY-9545: add extension method for stream->array using class literal
---
.../vmplugin/v8/PluginDefaultGroovyMethods.java | 34 ++++++++++++++++++++--
1 file changed, 32 insertions(+), 2 deletions(-)
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 76a7d7c..cd63f4f 100644
--- a/src/main/java/org/codehaus/groovy/vmplugin/v8/PluginDefaultGroovyMethods.java
+++ b/src/main/java/org/codehaus/groovy/vmplugin/v8/PluginDefaultGroovyMethods.java
@@ -29,6 +29,7 @@ import org.codehaus.groovy.runtime.InvokerHelper;
import org.codehaus.groovy.runtime.NullObject;
import org.codehaus.groovy.runtime.RangeInfo;
+import java.lang.reflect.Array;
import java.lang.reflect.Method;
import java.util.Arrays;
import java.util.Enumeration;
@@ -502,8 +503,37 @@ public class PluginDefaultGroovyMethods extends DefaultGroovyMethodsSupport {
}
/**
+ * Returns an array containing the elements of the stream.
+ * <pre class="groovyTestCase">
+ * assert Arrays.equals([].stream().toArray(Object), new Object[0])
+ * assert Arrays.equals([].stream().toArray(String), new String[0])
+ * assert Arrays.equals(['x'].stream().toArray(Object), ['x'].toArray())
+ * assert Arrays.equals(['x'].stream().toArray(String), ['x'] as String[])
+ * assert Arrays.equals(['x'].stream().toArray(CharSequence), ['x'] as CharSequence[])
+ *
+ * groovy.test.GroovyAssert.shouldFail(ArrayStoreException) {
+ * ['x'].stream().toArray(Thread)
+ * }
+ *
+ * // Stream#toArray(IntFunction) should still be used for closure literal:
+ * assert Arrays.equals(['x'].stream().toArray { n -> new String[n] }, ['x'] as String[])
+ *
+ * // Stream#toArray(IntFunction) should still be used for method reference:
+ * assert Arrays.equals(['x'].stream().toArray(String[]::new), ['x'] as String[])
+ * </pre>
+ *
+ * @param self the stream
+ * @param type the array element type
+ *
+ * @since x.y.z
+ */
+ public static <T> T[] toArray(final Stream<? extends T> self, final Class<T> type) {
+ return self.toArray(length -> (T[]) Array.newInstance(type, length));
+ }
+
+ /**
* Accumulates the elements of stream into a new List.
- * @param self the Stream
+ * @param self the stream
* @param <T> the type of element
* @return a new {@code java.util.List} instance
*
@@ -515,7 +545,7 @@ public class PluginDefaultGroovyMethods extends DefaultGroovyMethodsSupport {
/**
* Accumulates the elements of stream into a new Set.
- * @param self the Stream
+ * @param self the stream
* @param <T> the type of element
* @return a new {@code java.util.Set} instance
*