You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@groovy.apache.org by pa...@apache.org on 2018/08/08 13:09:16 UTC
groovy git commit: GROOVY-8733: Groovy could provide a chop DGM
method (reworked slightly for consistency)
Repository: groovy
Updated Branches:
refs/heads/master 25561e4c1 -> 845af7f72
GROOVY-8733: Groovy could provide a chop DGM method (reworked slightly for consistency)
Project: http://git-wip-us.apache.org/repos/asf/groovy/repo
Commit: http://git-wip-us.apache.org/repos/asf/groovy/commit/845af7f7
Tree: http://git-wip-us.apache.org/repos/asf/groovy/tree/845af7f7
Diff: http://git-wip-us.apache.org/repos/asf/groovy/diff/845af7f7
Branch: refs/heads/master
Commit: 845af7f720f137cc1527922409bd14996862f117
Parents: 25561e4
Author: Paul King <pa...@asert.com.au>
Authored: Wed Aug 8 23:09:05 2018 +1000
Committer: Paul King <pa...@asert.com.au>
Committed: Wed Aug 8 23:09:05 2018 +1000
----------------------------------------------------------------------
.../groovy/runtime/DefaultGroovyMethods.java | 46 ++++++++------------
1 file changed, 19 insertions(+), 27 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/groovy/blob/845af7f7/src/main/java/org/codehaus/groovy/runtime/DefaultGroovyMethods.java
----------------------------------------------------------------------
diff --git a/src/main/java/org/codehaus/groovy/runtime/DefaultGroovyMethods.java b/src/main/java/org/codehaus/groovy/runtime/DefaultGroovyMethods.java
index e9d29be..d54e405 100644
--- a/src/main/java/org/codehaus/groovy/runtime/DefaultGroovyMethods.java
+++ b/src/main/java/org/codehaus/groovy/runtime/DefaultGroovyMethods.java
@@ -12536,13 +12536,13 @@ public class DefaultGroovyMethods extends DefaultGroovyMethodsSupport {
}
/**
- * Chops the array into pieces, returning a piece for each chop size plus the remainder.
- * Returns a list of all the pieces leaving the original array intact.
- * If the array is too small, truncated (possibly empty) pieces are returned.
+ * Chops the array into pieces, returning lists with sizes corresponding to the supplied chop sizes.
+ * If the array isn't large enough, truncated (possibly empty) pieces are returned.
+ * Using a chop size of -1 will cause that piece to contain all remaining items from the array.
*
* @param self an Array to be chopped
- * @param chopSizes an Array of sizes
- * @return a list of lists chopping the original array into pieces determined by chopSizes
+ * @param chopSizes the sizes for the returned pieces
+ * @return a list of lists chopping the original array elements into pieces determined by chopSizes
* @see #collate(Object[], int) to chop a list into pieces of a fixed size
* @since 2.5.2
*/
@@ -12551,21 +12551,22 @@ public class DefaultGroovyMethods extends DefaultGroovyMethodsSupport {
}
/**
- * Chops the Iterable into pieces, returning a piece for each chop size plus the remainder.
- * Returns a list of all the pieces leaving the original Iterable intact.
- * If the Iterable is too small, truncated (possibly empty) pieces are returned.
+ * Chops the Iterable into pieces, returning lists with sizes corresponding to the supplied chop sizes.
+ * If the Iterable isn't large enough, truncated (possibly empty) pieces are returned.
+ * Using a chop size of -1 will cause that piece to contain all remaining items from the Iterable.
* <p>
* Example usage:
* <pre class="groovyTestCase">
- * assert [1, 2, 3, 4].chop(1) == [[1], [2, 3, 4]]
- * assert ('a'..'h').chop(2, 4) == [['a', 'b'], ['c', 'd', 'e', 'f'], ['g', 'h']]
- * assert ['a', 'b', 'c', 'd', 'e'].chop(3) == [['a', 'b', 'c'], ['d', 'e']]
+ * assert [1, 2, 3, 4].chop(1) == [[1]]
+ * assert [1, 2, 3, 4].chop(1,-1) == [[1], [2, 3, 4]]
+ * assert ('a'..'h').chop(2, 4) == [['a', 'b'], ['c', 'd', 'e', 'f']]
+ * assert ['a', 'b', 'c', 'd', 'e'].chop(3) == [['a', 'b', 'c']]
* assert ['a', 'b', 'c', 'd', 'e'].chop(1, 2, 3) == [['a'], ['b', 'c'], ['d', 'e']]
* assert ['a', 'b', 'c', 'd', 'e'].chop(1, 2, 3, 3, 3) == [['a'], ['b', 'c'], ['d', 'e'], [], []]
* </pre>
*
* @param self an Iterable to be chopped
- * @param chopSizes an Array of sizes
+ * @param chopSizes the sizes for the returned pieces
* @return a list of lists chopping the original iterable into pieces determined by chopSizes
* @see #collate(Iterable, int) to chop an Iterable into pieces of a fixed size
* @since 2.5.2
@@ -12573,32 +12574,23 @@ public class DefaultGroovyMethods extends DefaultGroovyMethodsSupport {
public static <T> List<List<T>> chop(Iterable<T> self, int... chopSizes) {
return chop(self.iterator(), chopSizes);
}
+
/**
- * Chops the iterator items into pieces, returning a piece for each chop size plus the remainder.
- * Returns a list of all the pieces.
+ * Chops the iterator items into pieces, returning lists with sizes corresponding to the supplied chop sizes.
* If the iterator is exhausted early, truncated (possibly empty) pieces are returned.
+ * Using a chop size of -1 will cause that piece to contain all remaining items from the iterator.
*
* @param self an Iterator to be chopped
- * @param chopSizes an Array of sizes
- * @return a list of lists chopping the original array into pieces determined by chopSizes
+ * @param chopSizes the sizes for the returned pieces
+ * @return a list of lists chopping the original iterator elements into pieces determined by chopSizes
* @since 2.5.2
*/
public static <T> List<List<T>> chop(Iterator<T> self, int... chopSizes) {
List<List<T>> result = new ArrayList<List<T>>();
for (Integer nextSize : chopSizes) {
int size = nextSize;
- if (size < 0) {
- throw new IllegalArgumentException("chop found negative chopSize: " + nextSize);
- }
- List<T> next = new ArrayList<T>();
- while (size-- > 0 && self.hasNext()) {
- next.add(self.next());
- }
- result.add(next);
- }
- if (self.hasNext()) {
List<T> next = new ArrayList<T>();
- while (self.hasNext()) {
+ while (size-- != 0 && self.hasNext()) {
next.add(self.next());
}
result.add(next);