summaryrefslogtreecommitdiff
path: root/BJC-Utils2/src/main/java/bjc/utils/funcdata/FunctionalList.java
diff options
context:
space:
mode:
authorbculkin2442 <bjculkin@mix.wvu.edu>2016-02-29 14:01:14 -0500
committerbculkin2442 <bjculkin@mix.wvu.edu>2016-02-29 14:01:14 -0500
commitd41419d6d4dad49d454c34562d020a042c0dbe26 (patch)
tree76348da043de6f3627e0f557d6b5f8ef4bdb2d90 /BJC-Utils2/src/main/java/bjc/utils/funcdata/FunctionalList.java
parent82951e37e10b282d9a7c89f4662990b64949c943 (diff)
Implemented partitioning capabilities for lists
Diffstat (limited to 'BJC-Utils2/src/main/java/bjc/utils/funcdata/FunctionalList.java')
-rw-r--r--BJC-Utils2/src/main/java/bjc/utils/funcdata/FunctionalList.java26
1 files changed, 26 insertions, 0 deletions
diff --git a/BJC-Utils2/src/main/java/bjc/utils/funcdata/FunctionalList.java b/BJC-Utils2/src/main/java/bjc/utils/funcdata/FunctionalList.java
index d2f0988..72c5843 100644
--- a/BJC-Utils2/src/main/java/bjc/utils/funcdata/FunctionalList.java
+++ b/BJC-Utils2/src/main/java/bjc/utils/funcdata/FunctionalList.java
@@ -1,3 +1,4 @@
+
package bjc.utils.funcdata;
import java.util.ArrayList;
@@ -434,4 +435,29 @@ public class FunctionalList<E> implements Cloneable {
public int getSize() {
return wrap.size();
}
+
+ /**
+ * Partition this list into a list of sublists
+ *
+ * @param nPerPart
+ * The size of elements to put into each one of the sublists
+ * @return A list partitioned into partitions of size nPerPart
+ */
+ public FunctionalList<FunctionalList<E>> partition(int nPerPart) {
+ FunctionalList<FunctionalList<E>> ret = new FunctionalList<>();
+
+ GenHolder<FunctionalList<E>> currPart = new GenHolder<>(
+ new FunctionalList<>());
+
+ this.forEach((val) -> {
+ if (currPart.unwrap((vl) -> vl.getSize() >= nPerPart)) {
+ ret.add(currPart.unwrap((vl) -> vl));
+ currPart.transform((vl) -> new FunctionalList<>());
+ } else {
+ currPart.unwrap((vl) -> vl.add(val));
+ }
+ });
+
+ return ret;
+ }
}