public static <T> Iterable<T> unique(final Iterable<? extends T> it) {
    return isEmptyCollection(it)? Collections.<T>emptyList() : new Iterable<T>() {
      @NotNull
      @Override
      public Iterator<T> iterator() {
        return unique(it.iterator());
      }
    };
  }
public static <T> Iterable<T> unique(final Iterable<? extends T> it)