code: public Iterator<List<T>> iterator()
      {
          return new Iterator<List<T>>()
          {
              public boolean hasNext()
              {
                  return hasMore();
              }
  
  
              public List<T> next()
              {
                  return nextCombinationAsList();
              }
  
  
              public void remove()
              {
                  throw new UnsupportedOperationException("Iterator does not support removal.");
              }
          };
      }
docs: <p>Provides a read-only iterator for iterating over the combinations
  generated by this object.  This method is the implementation of the
  {@link Iterable} interface that permits instances of this class to be
  used with the new-style for loop.</p>
  <p>For example:</p>
  <pre>
  List&lt;Integer&gt; elements = Arrays.asList(1, 2, 3);
  CombinationGenerator&lt;Integer&gt; combinations = new CombinationGenerator(elements, 2);
  for (List&lt;Integer&gt; c : combinations)
  {
  // Do something with each combination.
  }
  </pre>
  @return An iterator.
  @since 1.1