code: @Override
      public final Iterator<T> iterator() {
          synchronized (this.state) {
              checkState();
              this.state.available = false;
              final Iterator<T> iterator;
              try {
                  iterator = new CheckedIterator<T>(doIterator(), this);
              } catch (final Throwable ex) {
                  throw Throwables.propagate(ex);
              }
              this.state.activeIterator = iterator;
              return iterator;
          }
      }
docs: Terminal operation returning an Iterator over the elements of this Stream. {@inheritDoc}