@Override
  public void remove() {
    if (!canRemove) {
      throw new IllegalStateException("remove() can only be called " +
                                      "on the FilterIterator immediately after a successful " +
                                      "call to next(). A call to remove() immediately after " +
                                      "a call to hasNext() or remove() will also fail.");
    }
    canRemove = false;
    iterator.remove();
  }
@Override
  public void remove()