[ https://issues.apache.org/jira/browse/GROOVY-8406?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16286634#comment-16286634 ]
ASF GitHub Bot commented on GROOVY-8406: ---------------------------------------- Github user shils commented on a diff in the pull request: https://github.com/apache/groovy/pull/644#discussion_r156211571 --- Diff: src/main/org/codehaus/groovy/runtime/DefaultGroovyMethods.java --- @@ -3371,77 +3396,179 @@ public static Number count(byte[] self, Object value) { } /** - * Iterates through this aggregate Object transforming each item into a new value using Closure.IDENTITY - * as a transformer, basically returning a list of items copied from the original object. - * <pre class="groovyTestCase">assert [1,2,3] == [1,2,3].iterator().collect()</pre> + * Iterates through this aggregate Object transforming each item into a new value using the <code>transform</code> closure + * and adding it to the supplied <code>collector</code>. * - * @param self an aggregate Object with an Iterator returning its items + * @param self an aggregate Object with an Iterator returning its items + * @param collector the Collection to which the transformed values are added + * @param transform the closure used to transform each item of the aggregate object + * @return the collector with all transformed values added to it + * @since 1.0 + */ + public static <T> Collection<T> collect(Object self, Collection<T> collector, Closure<? extends T> transform) { + return collect(InvokerHelper.asIterator(self), collector, transform); + } + + /** + * Iterates through this Array transforming each item into a new value using the + * <code>transform</code> closure, returning a list of transformed values. + * + * @param self an Array + * @param transform the closure used to transform each item of the Array * @return a List of the transformed values - * @see Closure#IDENTITY - * @since 1.8.5 + * @since 2.5.0 */ - public static Collection collect(Object self) { - return collect(self, Closure.IDENTITY); + public static <S,T> List<T> collect(S[] self, @ClosureParams(FirstParam.Component.class) Closure<T> transform) { + return collect(new ArrayIterator<S>(self), transform); } /** - * Iterates through this aggregate Object transforming each item into a new value using the <code>transform</code> closure + * Iterates through this Array transforming each item into a new value using the <code>transform</code> closure * and adding it to the supplied <code>collector</code>. + * <pre class="groovyTestCase"> + * Integer[] nums = [1,2,3] + * List<Integer> answer = [] + * nums.collect(answer) { it * 2 } + * assert [2,4,6] == answer + * </pre> * - * @param self an aggregate Object with an Iterator returning its items + * @param self an Array * @param collector the Collection to which the transformed values are added - * @param transform the closure used to transform each item of the aggregate object + * @param transform the closure used to transform each item * @return the collector with all transformed values added to it - * @since 1.0 + * @since 2.5.0 */ - public static <T> Collection<T> collect(Object self, Collection<T> collector, Closure<? extends T> transform) { - for (Iterator iter = InvokerHelper.asIterator(self); iter.hasNext(); ) { + public static <S,T> Collection<T> collect(S[] self, Collection<T> collector, @ClosureParams(FirstParam.Component.class) Closure<? extends T> transform) { + return collect(new ArrayIterator<S>(self), collector, transform); + } + + /** + * Iterates through this Iterator transforming each item into a new value using the + * <code>transform</code> closure, returning a list of transformed values. + * + * @param self an Iterator + * @param transform the closure used to transform each item + * @return a List of the transformed values + * @since 2.5.0 + */ + public static <S,T> List<T> collect(Iterator<S> self, @ClosureParams(FirstParam.Component.class) Closure<T> transform) { + return (List<T>) collect(self, new ArrayList<T>(), transform); + } + + /** + * Iterates through this Iterator transforming each item into a new value using the <code>transform</code> closure + * and adding it to the supplied <code>collector</code>. + * + * @param self an Iterator + * @param collector the Collection to which the transformed values are added + * @param transform the closure used to transform each item + * @return the collector with all transformed values added to it + * @since 2.5.0 + */ + public static <S,T> Collection<T> collect(Iterator<S> self, Collection<T> collector, @ClosureParams(FirstParam.FirstGenericType.class) Closure<? extends T> transform) { + Iterator iter = InvokerHelper.asIterator(self); --- End diff -- Is this necessary? > DefaultGroovyMethods missing Array support > ------------------------------------------ > > Key: GROOVY-8406 > URL: https://issues.apache.org/jira/browse/GROOVY-8406 > Project: Groovy > Issue Type: Improvement > Affects Versions: 2.5.0-beta-1 > Reporter: Nathan Harvey > Assignee: Paul King > Priority: Minor > Labels: easyfix > > The methods every, any, and collect support instances of Iterable and > Iterator, but do not include equivalent methods for support arrays. -- This message was sent by Atlassian JIRA (v6.4.14#64029)