@Override
  public boolean hasNext() {
    if (hasNextCache != null) {
      return hasNextCache.booleanValue();
    }

    while (!groupIterator.hasNext() && valuesIterator.hasNext()) {
      groupIterator = createValueIterator(valuesIterator.next());
    }
    return hasNextCache = groupIterator.hasNext();
  }
@Override
  public boolean hasNext()