private void obtainNext() {
    if (isNextObtained) return;
    boolean hasNext = delegate.hasNext();
    setCurrent(hasNext ? delegate.next() : null);

    isCurrentIsValid = hasNext;
    isNextObtained = true;
  }
private void obtainNext()