/**
  * Removes the current element in the iteration.
  *
  * @throws java.lang.IllegalStateException if the next method has not yet been called, or the
  *     remove method has already been called after the last call to the next method.
  * @see java.util.Iterator#remove()
  */
 @Override
 public void remove() {
   Assert.state(nextCalled.compareAndSet(true, false), "next was not called before remove");
   iterators.peek().remove();
 }