code: public static <T> T randomFrom(Iterable<T> iterable, Collection<T> excludes) {
      checkArgument(!Iterables.isEmpty(iterable), "Iterable cannot be empty");
      checkArgument(!containsAll(excludes, iterable), "Iterable only consists of the given excludes");
      Iterable<T> copy = Lists.newArrayList(iterable);
      Iterables.removeAll(copy, excludes);
      return randomFrom(copy);
    }
docs: Returns a random element from the given {@link Iterable} that's not in the values to exclude.
  
  @param iterable {@link Iterable} to return random element from
  @param excludes values to exclude
  @param <T> the type of elements in the given iterable
  @return random element from the given {@link Iterable} that's not in the values to exclude
  @throws IllegalArgumentException if the iterable is empty