From d41419d6d4dad49d454c34562d020a042c0dbe26 Mon Sep 17 00:00:00 2001 From: bculkin2442 Date: Mon, 29 Feb 2016 14:01:14 -0500 Subject: Implemented partitioning capabilities for lists --- .../java/bjc/utils/funcdata/FunctionalList.java | 26 ++++++++++++++++++++++ 1 file changed, 26 insertions(+) (limited to 'BJC-Utils2/src/main/java/bjc/utils/funcdata') 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 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> partition(int nPerPart) { + FunctionalList> ret = new FunctionalList<>(); + + GenHolder> 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; + } } -- cgit v1.2.3