OSDN Git Service

start v1.101.107-SNAPSHOT
[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  *
17  * @param <E> コレクション内の要素型
18  */
19 public class UnmodIterator<E> implements Iterator<E> {
20
21     private final Iterator<E> rawIterator;
22
23     /**
24      * コンストラクタ。
25      *
26      * @param iterator ラップ元Iterator
27      * @throws NullPointerException 引数がnull
28      */
29     public UnmodIterator(Iterator<E> iterator) throws NullPointerException{
30         super();
31         if(iterator == null) throw new NullPointerException();
32         this.rawIterator = iterator;
33         return;
34     }
35
36     /**
37      * 削除操作不可なラップIteratorを生成する。
38      *
39      * @param <E> コレクション内の要素型
40      * @param iterator ラップ元Iterator
41      * @return 変更操作不可なIterator
42      * @throws NullPointerException 引数がnull
43      */
44     public static <E> Iterator<E> wrapUnmod(Iterator<E> iterator)
45             throws NullPointerException{
46         if(iterator == null) throw new NullPointerException();
47         return new UnmodIterator<>(iterator);
48     }
49
50     /**
51      * 削除操作不可なラップIterableを生成する。
52      *
53      * @param <E> コレクション内の要素型
54      * @param iterable ラップ元Iterable
55      * @return 変更操作不可なIteratorを生成するIterable
56      * @throws NullPointerException 引数がnull
57      */
58     public static <E> Iterable<E> wrapUnmod(Iterable<E> iterable)
59             throws NullPointerException{
60         if(iterable == null) throw new NullPointerException();
61         final Iterable<E> innerArg = iterable;
62         return new Iterable<E>(){
63             @Override
64             public Iterator<E> iterator(){
65                 Iterator<E> iterator = innerArg.iterator();
66                 return new UnmodIterator<>(iterator);
67             }
68         };
69     }
70
71     /**
72      * Iterableに由来する削除操作不可なラップIteratorを生成する。
73      *
74      * @param <E> コレクション内の要素型
75      * @param iterable Iterable
76      * @return 変更操作不可なIterator
77      * @throws NullPointerException 引数がnull
78      */
79     public static <E> Iterator<E> unmodIterator(Iterable<E> iterable)
80             throws NullPointerException{
81         if(iterable == null) throw new NullPointerException();
82         Iterator<E> iterator = iterable.iterator();
83         return new UnmodIterator<>(iterator);
84     }
85
86     /**
87      * {@inheritDoc}
88      *
89      * <p>反復子に次の要素があるか判定する。
90      *
91      * @return {@inheritDoc}
92      */
93     @Override
94     public boolean hasNext(){
95         return this.rawIterator.hasNext();
96     }
97
98     /**
99      * {@inheritDoc}
100      *
101      * <p>反復子の次の要素を取得する。
102      *
103      * @return {@inheritDoc}
104      * @throws NoSuchElementException これ以上要素はない。
105      */
106     @Override
107     public E next() throws NoSuchElementException{
108         return this.rawIterator.next();
109     }
110
111     /**
112      * {@inheritDoc}
113      *
114      * <p>必ず失敗し例外を投げる。
115      *
116      * @throws UnsupportedOperationException {@inheritDoc}
117      */
118     @Override
119     public void remove() throws UnsupportedOperationException{
120         throw new UnsupportedOperationException();
121     }
122
123 }