|  | @@ -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();
 | 
	
		
			
				|  |  | +	}
 | 
	
		
			
				|  |  | +}
 |