summaryrefslogtreecommitdiff
path: root/BJC-Utils2/src/main/java/bjc/utils/funcutils/GroupPartIteration.java
diff options
context:
space:
mode:
Diffstat (limited to 'BJC-Utils2/src/main/java/bjc/utils/funcutils/GroupPartIteration.java')
-rw-r--r--BJC-Utils2/src/main/java/bjc/utils/funcutils/GroupPartIteration.java33
1 files changed, 16 insertions, 17 deletions
diff --git a/BJC-Utils2/src/main/java/bjc/utils/funcutils/GroupPartIteration.java b/BJC-Utils2/src/main/java/bjc/utils/funcutils/GroupPartIteration.java
index 229d271..798b6f1 100644
--- a/BJC-Utils2/src/main/java/bjc/utils/funcutils/GroupPartIteration.java
+++ b/BJC-Utils2/src/main/java/bjc/utils/funcutils/GroupPartIteration.java
@@ -18,45 +18,44 @@ import bjc.utils.funcdata.IList;
final class GroupPartIteration<E> implements Consumer<E> {
private IList<IList<E>> returnedList;
- private IHolder<IList<E>> currentPartition;
+ public IList<E> currentPartition;
private IList<E> rejectedItems;
- private IHolder<Integer> numberInCurrentPartition;
+ private int numberInCurrentPartition;
private int numberPerPartition;
private Function<E, Integer> elementCounter;
- public GroupPartIteration(IList<IList<E>> returned,
- IHolder<IList<E>> currPart, IList<E> rejects,
- IHolder<Integer> numInCurrPart, int nPerPart,
- Function<E, Integer> eleCount) {
+ public GroupPartIteration(IList<IList<E>> returned, IList<E> rejects,
+ int nPerPart, Function<E, Integer> eleCount) {
this.returnedList = returned;
- this.currentPartition = currPart;
this.rejectedItems = rejects;
- this.numberInCurrentPartition = numInCurrPart;
this.numberPerPartition = nPerPart;
this.elementCounter = eleCount;
+
+ this.currentPartition = new FunctionalList<>();
+ this.numberInCurrentPartition = 0;
}
@Override
public void accept(E value) {
- if (numberInCurrentPartition.unwrap((number) -> number >= numberPerPartition)) {
- returnedList.add(currentPartition.unwrap((partition) -> partition));
+ boolean shouldStartPartition = numberInCurrentPartition >= numberPerPartition;
+
+ if (shouldStartPartition) {
+ returnedList.add(currentPartition);
- currentPartition.transform((partition) -> new FunctionalList<>());
- numberInCurrentPartition.transform((number) -> 0);
+ currentPartition = new FunctionalList<>();
+ numberInCurrentPartition = 0;
} else {
int currentElementCount = elementCounter.apply(value);
- boolean shouldReject = numberInCurrentPartition.unwrap((number) -> {
- return (number + currentElementCount) >= numberPerPartition;
- });
+ boolean shouldReject = (numberInCurrentPartition + currentElementCount) >= numberPerPartition;
if (shouldReject) {
rejectedItems.add(value);
} else {
- currentPartition.unwrap((partition) -> partition.add(value));
- numberInCurrentPartition.transform((number) -> number + currentElementCount);
+ currentPartition.add(value);
+ numberInCurrentPartition += currentElementCount;
}
}
}