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;
}
/**