|
@@ -0,0 +1,32 @@
|
|
|
+// Java Iterator interface reference:
|
|
|
+// https://docs.oracle.com/javase/8/docs/api/java/util/Iterator.html
|
|
|
+class PeekingIterator implements Iterator<Integer> {
|
|
|
+ private Iterator<Integer> iter;
|
|
|
+ private Integer peek;
|
|
|
+
|
|
|
+ public PeekingIterator(Iterator<Integer> iterator) {
|
|
|
+ // initialize any member here.
|
|
|
+ this.iter = iterator;
|
|
|
+ }
|
|
|
+
|
|
|
+ // Returns the next element in the iteration without advancing the iterator.
|
|
|
+ public Integer peek() {
|
|
|
+ if (this.peek == null) this.peek = this.iter.next();
|
|
|
+ return this.peek;
|
|
|
+ }
|
|
|
+
|
|
|
+ // hasNext() and next() should behave the same as in the Iterator interface.
|
|
|
+ // Override them if needed.
|
|
|
+ @Override
|
|
|
+ public Integer next() {
|
|
|
+ if (this.peek == null) return this.iter.next();
|
|
|
+ Integer next = this.peek;
|
|
|
+ this.peek = null;
|
|
|
+ return next;
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public boolean hasNext() {
|
|
|
+ return peek != null || this.iter.hasNext();
|
|
|
+ }
|
|
|
+}
|