@Override public boolean hasNext() { if (null == hasNext) { while (inputItr.hasNext()) { final I possibleNext = inputItr.next(); if (validator.validate(possibleNext)) { nextElement = transform(possibleNext); hasNext = true; return Boolean.TRUE.equals(hasNext); } else if (skipInvalid) { continue; } else { handleInvalidItem(possibleNext); } } hasNext = false; nextElement = null; } final boolean hasNextResult = Boolean.TRUE.equals(hasNext); if (autoClose && !hasNextResult) { close(); } return hasNextResult; }