OSDN Git Service

remove Revision tag
[stigmata/stigmata.git] / src / main / java / jp / sourceforge / stigmata / utils / MultipleIterator.java
1 package jp.sourceforge.stigmata.utils;
2
3 /*
4  * $Id$
5  */
6
7 import java.util.ArrayList;
8 import java.util.Collection;
9 import java.util.Iterator;
10 import java.util.List;
11 import java.util.NoSuchElementException;
12
13 /**
14  * 
15  * @author Haruaki Tamada
16  */
17 public class MultipleIterator<T> implements Iterator<T>{
18     private List<Iterator<T>> iterators = new ArrayList<Iterator<T>>();
19     private int index = 0;
20
21     public MultipleIterator(){
22     }
23
24     public MultipleIterator(Collection<Iterator<T>> collection){
25         this(collection.iterator());
26     }
27
28     public MultipleIterator(Iterator<Iterator<T>> iterator){
29         while(iterator.hasNext()){
30             iterators.add(iterator.next());
31         }
32     }
33
34     public MultipleIterator(Iterator<T>[] iteratorArray){
35         for(Iterator<T> iterator: iteratorArray){
36             iterators.add(iterator);
37         }
38     }
39
40     public void add(Iterator<T> iterator){
41         iterators.add(iterator);
42     }
43
44     @Override
45     public boolean hasNext(){
46         while(index < iterators.size()){
47             boolean next = iterators.get(index).hasNext();
48             if(next){
49                 return true;
50             }
51             index++;
52         }
53         return false;
54     }
55
56     /** 
57      */
58     @Override
59     public T next(){
60         if(!iterators.get(index).hasNext()){
61             index++;
62             while(index < iterators.size()){
63                 if(iterators.get(index).hasNext()){
64                     return iterators.get(index).next();
65                 }
66                 index++;
67             }
68             throw new NoSuchElementException();
69         }
70
71         return iterators.get(index).next();
72     }
73
74     @Override
75     public void remove(){
76         iterators.get(index).remove();
77     }
78
79     public void remove(Iterator<T> iterator){
80         iterators.remove(iterator);
81     }
82 }