You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@groovy.apache.org by su...@apache.org on 2021/08/13 02:49:30 UTC

[groovy] branch master updated: Trivial tweak for DGM `collate`

This is an automated email from the ASF dual-hosted git repository.

sunlan pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/groovy.git


The following commit(s) were added to refs/heads/master by this push:
     new a5c9e73  Trivial tweak for DGM `collate`
a5c9e73 is described below

commit a5c9e73301ac4f59a458f797e487158b9f6d07b9
Author: Daniel Sun <su...@apache.org>
AuthorDate: Fri Aug 13 10:48:32 2021 +0800

    Trivial tweak for DGM `collate`
---
 .../groovy/runtime/DefaultGroovyMethods.java        | 21 ++++++++++++---------
 1 file changed, 12 insertions(+), 9 deletions(-)

diff --git a/src/main/java/org/codehaus/groovy/runtime/DefaultGroovyMethods.java b/src/main/java/org/codehaus/groovy/runtime/DefaultGroovyMethods.java
index 656735e..69f80f0 100644
--- a/src/main/java/org/codehaus/groovy/runtime/DefaultGroovyMethods.java
+++ b/src/main/java/org/codehaus/groovy/runtime/DefaultGroovyMethods.java
@@ -3368,24 +3368,27 @@ public class DefaultGroovyMethods extends DefaultGroovyMethodsSupport {
      * @since 2.4.0
      */
     public static <T> List<List<T>> collate(Iterable<T> self, int size, int step, boolean keepRemainder) {
-        List<T> selfList = asList(self);
-        List<List<T>> answer = new ArrayList<>();
+        final List<T> selfList = asList(self);
+        final List<List<T>> answer;
         if (size <= 0) {
+            answer = new ArrayList<>(1);
             answer.add(selfList);
         } else {
             if (step == 0) throw new IllegalArgumentException("step cannot be zero");
-            for (int pos = 0; pos < selfList.size() && pos > -1; pos += step) {
-                if (!keepRemainder && pos > selfList.size() - size) {
-                    break ;
+            final int selfListSize = selfList.size();
+            answer = new ArrayList<>(step < 0 ? 1 : (selfListSize / step + 1));
+            for (int pos = 0; pos < selfListSize && pos > -1; pos += step) {
+                if (!keepRemainder && pos > selfListSize - size) {
+                    break;
                 }
-                List<T> element = new ArrayList<>() ;
-                for (int offs = pos; offs < pos + size && offs < selfList.size(); offs++) {
+                List<T> element = new ArrayList<>(size);
+                for (int offs = pos; offs < pos + size && offs < selfListSize; offs++) {
                     element.add(selfList.get(offs));
                 }
-                answer.add( element ) ;
+                answer.add(element);
             }
         }
-        return answer ;
+        return answer;
     }
 
     /**