From 77fcc58d1facffbc3af50be8c05985350e9f1355 Mon Sep 17 00:00:00 2001 From: bculkin2442 Date: Sun, 17 Apr 2016 15:01:44 -0400 Subject: Code maintenace and changes --- .../bjc/utils/funcutils/GroupPartIteration.java | 64 ++++++++++++++++++++++ 1 file changed, 64 insertions(+) create mode 100644 BJC-Utils2/src/main/java/bjc/utils/funcutils/GroupPartIteration.java (limited to 'BJC-Utils2/src/main/java/bjc/utils/funcutils/GroupPartIteration.java') diff --git a/BJC-Utils2/src/main/java/bjc/utils/funcutils/GroupPartIteration.java b/BJC-Utils2/src/main/java/bjc/utils/funcutils/GroupPartIteration.java new file mode 100644 index 0000000..3837858 --- /dev/null +++ b/BJC-Utils2/src/main/java/bjc/utils/funcutils/GroupPartIteration.java @@ -0,0 +1,64 @@ +package bjc.utils.funcutils; + +import java.util.function.Consumer; +import java.util.function.Function; + +import bjc.utils.data.IHolder; +import bjc.utils.funcdata.FunctionalList; +import bjc.utils.funcdata.IFunctionalList; + +/** + * Implements a single group partitioning pass on a list + * + * @author ben + * + * @param + * The type of element in the list being partitioned + */ +final class GroupPartIteration + implements Consumer { + private IFunctionalList> returnedList; + private IHolder> currentPartition; + private IFunctionalList rejectedItems; + private IHolder numberInCurrentPartition; + private int numberPerPartition; + private Function elementCounter; + + public GroupPartIteration( + IFunctionalList> returned, + IHolder> currPart, + IFunctionalList rejects, IHolder numInCurrPart, + int nPerPart, Function eleCount) { + this.returnedList = returned; + this.currentPartition = currPart; + this.rejectedItems = rejects; + this.numberInCurrentPartition = numInCurrPart; + this.numberPerPartition = nPerPart; + this.elementCounter = eleCount; + } + + @Override + public void accept(E value) { + if (numberInCurrentPartition + .unwrap((number) -> number >= numberPerPartition)) { + returnedList.add( + currentPartition.unwrap((partition) -> partition)); + + currentPartition + .transform((partition) -> new FunctionalList<>()); + numberInCurrentPartition.transform((number) -> 0); + } else { + int currentElementCount = elementCounter.apply(value); + + if (numberInCurrentPartition.unwrap((number) -> (number + + currentElementCount) >= numberPerPartition)) { + rejectedItems.add(value); + } else { + currentPartition + .unwrap((partition) -> partition.add(value)); + numberInCurrentPartition.transform( + (number) -> number + currentElementCount); + } + } + } +} \ No newline at end of file -- cgit v1.2.3