code: public static <T> Iterator<T> unique(Iterator<T> self, @ClosureParams(value=FromString.class, options={"T","T,T"}) Closure condition) {
          Comparator<T> comparator = condition.getMaximumNumberOfParameters() == 1
                  ? new OrderBy<T>(condition, true)
                  : new ClosureComparator<T>(condition);
          return unique(self, comparator);
      }
docs: Returns an iterator equivalent to this iterator but with all duplicated items
  removed by using a Closure to determine duplicate (equal) items.
  The original iterator will be fully processed after the call.
  <p>
  If the closure takes a single parameter, the argument passed will be each element,
  and the closure should return a value used for comparison (either using
  {@link java.lang.Comparable#compareTo(java.lang.Object)} or {@link java.lang.Object#equals(java.lang.Object)}).
  If the closure takes two parameters, two items from the Iterator
  will be passed as arguments, and the closure should return an
  int value (with 0 indicating the items are not unique).
  
  @param self      an Iterator
  @param condition a Closure used to determine unique items
  @return the modified Iterator
  @since 1.5.5