01 package net.sourceforge.pmd.util;
02
03 import java.util.Iterator;
04 import java.util.NoSuchElementException;
05
06 /**
07 * Creates a single compound Iterator from an array of Iterators.
08 *
09 * @param <T> The type returned by the Iterator.
10 *
11 * @see Iterator
12 */
13 public class CompoundIterator<T> implements Iterator<T> {
14 private final Iterator<T>[] iterators;
15 private int index;
16
17 /**
18 *
19 * @param iterators The iterators use.
20 */
21 public CompoundIterator(Iterator<T>... iterators) {
22 this.iterators = iterators;
23 this.index = 0;
24 }
25
26 /**
27 * {@inheritDoc}
28 */
29 public boolean hasNext() {
30 return getNextIterator() != null;
31 }
32
33 /**
34 * {@inheritDoc}
35 */
36 public T next() {
37 Iterator<T> iterator = getNextIterator();
38 if (iterator != null) {
39 return iterator.next();
40 } else {
41 throw new NoSuchElementException();
42 }
43 }
44
45 /**
46 * {@inheritDoc}
47 */
48 public void remove() {
49 Iterator<T> iterator = getNextIterator();
50 if (iterator != null) {
51 iterator.remove();
52 } else {
53 throw new IllegalStateException();
54 }
55 }
56
57 // Get the next iterator with values, returns null if there is no such iterator
58 private Iterator<T> getNextIterator() {
59 while (index < iterators.length) {
60 if (iterators[index].hasNext()) {
61 return iterators[index];
62 } else {
63 index++;
64 }
65 }
66 return null;
67 }
68 }
|