1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 package org.apache.commons.functor.core.collection;
18
19 import java.util.Iterator;
20
21 import org.apache.commons.functor.UnaryFunction;
22
23
24
25
26
27
28 public final class TransformedIterator<E, T> implements Iterator<T> {
29
30
31
32
33 private final UnaryFunction<? super E, ? extends T> function;
34 private final Iterator<? extends E> iterator;
35
36
37
38
39
40
41
42
43 public TransformedIterator(Iterator<? extends E> iterator, UnaryFunction<? super E, ? extends T> function) {
44 if (null == iterator) {
45 throw new IllegalArgumentException("Iterator argument was null");
46 }
47 if (null == function) {
48 throw new IllegalArgumentException("filtering UnaryFunction argument was null");
49 }
50 this.function = function;
51 this.iterator = iterator;
52 }
53
54
55
56
57
58
59
60
61 public boolean hasNext() {
62 return iterator.hasNext();
63 }
64
65
66
67
68
69 public T next() {
70 return function.evaluate(iterator.next());
71 }
72
73
74
75
76
77 public void remove() {
78 iterator.remove();
79 }
80
81
82
83
84 public boolean equals(Object obj) {
85 if (obj == this) {
86 return true;
87 }
88 if (!(obj instanceof TransformedIterator<?, ?>)) {
89 return false;
90 }
91 TransformedIterator<?, ?> that = (TransformedIterator<?, ?>) obj;
92 return function.equals(that.function) && iterator.equals(that.iterator);
93 }
94
95
96
97
98 public int hashCode() {
99 int hash = "TransformedIterator".hashCode();
100 hash <<= 2;
101 hash ^= function.hashCode();
102 hash <<= 2;
103 hash ^= iterator.hashCode();
104 return hash;
105 }
106
107
108
109
110 public String toString() {
111 return "TransformedIterator<" + iterator + "," + function + ">";
112 }
113
114
115
116
117
118
119
120
121
122 public static <E, T> Iterator<T> transform(Iterator<? extends E> iter, UnaryFunction<? super E, ? extends T> func) {
123 if (null == iter) {
124 return null;
125 }
126 return new TransformedIterator<E, T>(iter, func);
127 }
128
129
130
131
132
133
134
135 public static <E> Iterator<?> maybeTransform(Iterator<? extends E> iter, UnaryFunction<? super E, ?> func) {
136 return null == func ? (null == iter ? null : iter) : new TransformedIterator<E, Object>(iter, func);
137 }
138
139 }