OSDN Git Service

JDK1.7対応
[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<>(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             @Override
60             public Iterator<E> iterator(){
61                 Iterator<E> iterator = innerArg.iterator();
62                 return new UnmodIterator<>(iterator);
63             }
64         };
65     }
66
67     /**
68      * Iterableに由来する削除操作不可なラップIteratorを生成する。
69      * @param <E> コレクション内の要素型
70      * @param iterable Iterable
71      * @return 変更操作不可なIterator
72      * @throws NullPointerException 引数がnull
73      */
74     public static <E> Iterator<E> unmodIterator(Iterable<E> iterable)
75             throws NullPointerException{
76         if(iterable == null) throw new NullPointerException();
77         Iterator<E> iterator = iterable.iterator();
78         return new UnmodIterator<>(iterator);
79     }
80
81     /**
82      * {@inheritDoc}
83      * 反復子に次の要素があるか判定する。
84      * @return {@inheritDoc}
85      */
86     @Override
87     public boolean hasNext(){
88         return this.rawIterator.hasNext();
89     }
90
91     /**
92      * {@inheritDoc}
93      * 反復子の次の要素を取得する。
94      * @return {@inheritDoc}
95      * @throws NoSuchElementException これ以上要素はない。
96      */
97     @Override
98     public E next() throws NoSuchElementException{
99         return this.rawIterator.next();
100     }
101
102     /**
103      * {@inheritDoc}
104      * 必ず失敗し例外を投げる。
105      * @throws UnsupportedOperationException
106      */
107     @Override
108     public void remove() throws UnsupportedOperationException{
109         throw new UnsupportedOperationException();
110     }
111
112 }