code: public Iterator<T> getInputSplits() {
  
  		final InputSplitProvider provider = getEnvironment().getInputSplitProvider();
  
  		return new Iterator<T>() {
  
  			private T nextSplit;
  
  			@Override
  			public boolean hasNext() {
  
  				if (this.nextSplit == null) {
  
  					final InputSplit split = provider.getNextInputSplit();
  					if (split != null) {
  						@SuppressWarnings("unchecked")
  						final T tSplit = (T) split;
  						this.nextSplit = tSplit;
  						return true;
  					} else {
  						return false;
  					}
  				} else {
  					return true;
  				}
  			}
  
  			@Override
  			public T next() {
  				if (this.nextSplit == null && !hasNext()) {
  					throw new NoSuchElementException();
  				}
  
  				final T tmp = this.nextSplit;
  				this.nextSplit = null;
  				return tmp;
  			}
  
  			@Override
  			public void remove() {
  				throw new UnsupportedOperationException();
  			}
  		};
  	}
docs: Returns an iterator to a (possible empty) list of input splits which is expected to be consumed by this
  instance of the {@link AbstractInputTask}.
  
  @return an iterator to a (possible empty) list of input splits.