-
Notifications
You must be signed in to change notification settings - Fork 18
Expand file tree
/
Copy pathMergedIterator.java
More file actions
34 lines (27 loc) · 1012 Bytes
/
MergedIterator.java
File metadata and controls
34 lines (27 loc) · 1012 Bytes
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
package org.psjava.util;
import java.util.Iterator;
public class MergedIterator {
public static <T> Iterator<T> create(final Iterable<? extends Iterable<? extends T>> iterables) {
return new ReadOnlyIterator<T>() {
Iterator<? extends Iterable<? extends T>> topIterator = iterables.iterator();
Iterator<? extends T> currentSubIterator = null;
@Override
public boolean hasNext() {
while (currentSubIterator == null || !currentSubIterator.hasNext()) {
if (topIterator.hasNext())
currentSubIterator = topIterator.next().iterator();
else
return false;
}
return true;
}
@Override
public T next() {
hasNext();
return currentSubIterator.next();
}
};
}
private MergedIterator() {
}
}