OSDN Git Service

2d42f953a038308da725040c392680cf963587a2
[jovsonz/Jovsonz.git] / src / main / java / jp / sourceforge / jovsonz / UnmodIterator.java
1 /*
2  * unmodifiable iterator wrap
3  *
4  * License : The MIT License
5  * Copyright(c) 2010 olyutorskii
6  */
7
8 package jp.sourceforge.jovsonz;
9
10 import java.util.Iterator;
11 import java.util.NoSuchElementException;
12
13 /**
14  * 既存の{@link java.util.Iterator}および{@link java.lang.Iterable}に対し、
15  * 削除のできない変更操作不可なIteratorラッパを提供する。
16  * @param <E> コレクション内の要素型
17  */
18 public class UnmodIterator<E> implements Iterator<E> {
19
20     private final Iterator<E> rawIterator;
21
22     /**
23      * コンストラクタ。
24      * @param iterator ラップ元Iterator
25      * @throws NullPointerException 引数がnull
26      */
27     public UnmodIterator(Iterator<E> iterator) throws NullPointerException{
28         super();
29         if(iterator == null) throw new NullPointerException();
30         this.rawIterator = iterator;
31         return;
32     }
33
34     /**
35      * 削除操作不可なラップIteratorを生成する。
36      * @param <E> コレクション内の要素型
37      * @param iterator ラップ元Iterator
38      * @return 変更操作不可なIterator
39      * @throws NullPointerException 引数がnull
40      */
41     public static <E> Iterator<E> wrapUnmod(Iterator<E> iterator)
42             throws NullPointerException{
43         if(iterator == null) throw new NullPointerException();
44         return new UnmodIterator<E>(iterator);
45     }
46
47     /**
48      * 削除操作不可なラップIterableを生成する。
49      * @param <E> コレクション内の要素型
50      * @param iterable ラップ元Iterable
51      * @return 変更操作不可なIteratorを生成するIterable
52      * @throws NullPointerException 引数がnull
53      */
54     public static <E> Iterable<E> wrapUnmod(Iterable<E> iterable)
55             throws NullPointerException{
56         if(iterable == null) throw new NullPointerException();
57         final Iterable<E> innerArg = iterable;
58         return new Iterable<E>(){
59             public Iterator<E> iterator(){
60                 Iterator<E> iterator = innerArg.iterator();
61                 return new UnmodIterator<E>(iterator);
62             }
63         };
64     }
65
66     /**
67      * Iterableに由来する削除操作不可なラップIteratorを生成する。
68      * @param <E> コレクション内の要素型
69      * @param iterable Iterable
70      * @return 変更操作不可なIterator
71      * @throws NullPointerException 引数がnull
72      */
73     public static <E> Iterator<E> unmodIterator(Iterable<E> iterable)
74             throws NullPointerException{
75         if(iterable == null) throw new NullPointerException();
76         Iterator<E> iterator = iterable.iterator();
77         return new UnmodIterator<E>(iterator);
78     }
79
80     /**
81      * {@inheritDoc}
82      * 反復子に次の要素があるか判定する。
83      * @return {@inheritDoc}
84      */
85     @Override
86     public boolean hasNext(){
87         return this.rawIterator.hasNext();
88     }
89
90     /**
91      * {@inheritDoc}
92      * 反復子の次の要素を取得する。
93      * @return {@inheritDoc}
94      * @throws NoSuchElementException これ以上要素はない。
95      */
96     @Override
97     public E next() throws NoSuchElementException{
98         return this.rawIterator.next();
99     }
100
101     /**
102      * {@inheritDoc}
103      * 必ず失敗し例外を投げる。
104      * @throws UnsupportedOperationException
105      */
106     @Override
107     public void remove() throws UnsupportedOperationException{
108         throw new UnsupportedOperationException();
109     }
110
111 }