Skip to content

Commit 2b53015

Browse files
authored
Reimplement DropLastGatherer (#92)
+ Remove finalizer and emit elements that can't possibly be in the last set as we encounter them
1 parent 2e04e87 commit 2b53015

File tree

1 file changed

+6
-13
lines changed

1 file changed

+6
-13
lines changed

src/main/java/com/ginsberg/gatherers4j/DropLastGatherer.java

+6-13
Original file line numberDiff line numberDiff line change
@@ -18,9 +18,8 @@
1818

1919
import org.jspecify.annotations.Nullable;
2020

21-
import java.util.ArrayList;
22-
import java.util.List;
23-
import java.util.function.BiConsumer;
21+
import java.util.ArrayDeque;
22+
import java.util.Deque;
2423
import java.util.function.Supplier;
2524
import java.util.stream.Gatherer;
2625

@@ -44,20 +43,14 @@ public Supplier<State<INPUT>> initializer() {
4443
public Integrator<State<INPUT>, INPUT, INPUT> integrator() {
4544
return Integrator.ofGreedy((state, element, downstream) -> {
4645
state.elements.add(element);
46+
if(state.elements.size() > count) {
47+
downstream.push(state.elements.removeFirst());
48+
}
4749
return !downstream.isRejecting();
4850
});
4951
}
5052

51-
@Override
52-
public BiConsumer<State<INPUT>, Downstream<? super INPUT>> finisher() {
53-
return (inputState, downstream) -> {
54-
for (int i = 0; i < inputState.elements.size() - count && !downstream.isRejecting(); i++) {
55-
downstream.push(inputState.elements.get(i));
56-
}
57-
};
58-
}
59-
6053
public static class State<INPUT> {
61-
final List<INPUT> elements = new ArrayList<>();
54+
final Deque<INPUT> elements = new ArrayDeque<>();
6255
}
6356
}

0 commit comments

Comments
 (0)