Skip to content

Commit e96963c

Browse files
committed
Cleanup and avoid extra calls to hasNext in MergedIterator
1 parent 7d369b6 commit e96963c

File tree

1 file changed

+21
-17
lines changed

1 file changed

+21
-17
lines changed
Lines changed: 21 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -1,40 +1,44 @@
11
package projections.Tools.Timeline.RangeQueries;
22

33
import java.util.Iterator;
4-
import java.util.LinkedList;
54
import java.util.NoSuchElementException;
65

7-
public class MergedIterator<E> implements Iterator<E>{
6+
public final class MergedIterator<E> implements Iterator<E> {
87
private final Iterator<E> iterators[];
98
private int index;
9+
private boolean internalHasNext;
1010

11-
public MergedIterator(Iterator<E>... iters){
11+
public MergedIterator(Iterator<E>... iters) {
1212
iterators = iters;
1313
index = 0;
14+
loadHasNext();
1415
}
15-
16-
17-
@Override
18-
public boolean hasNext() {
19-
while (index < iterators.length && !iterators[index].hasNext()) {
20-
index++;
21-
}
2216

23-
return index < iterators.length;
17+
@Override
18+
public final boolean hasNext() {
19+
return internalHasNext;
2420
}
2521

2622
@Override
27-
public E next() {
28-
if (hasNext()) {
29-
return iterators[index].next();
23+
public final E next() {
24+
if (internalHasNext) {
25+
E next = iterators[index].next();
26+
loadHasNext();
27+
return next;
3028
}
29+
else
30+
throw new NoSuchElementException();
31+
}
3132

32-
throw new NoSuchElementException();
33+
private final void loadHasNext() {
34+
while (index < iterators.length && !iterators[index].hasNext()) {
35+
index++;
36+
}
37+
internalHasNext = index < iterators.length;
3338
}
3439

3540
@Override
36-
public void remove() {
41+
public final void remove() {
3742
throw new UnsupportedOperationException();
3843
}
39-
4044
}

0 commit comments

Comments
 (0)