docs: public static <E> SetView<E> difference(final Set<E> set1, final Set<?> set2) {
      checkNotNull(set1, "set1");
      checkNotNull(set2, "set2");
  
      final Predicate<Object> notInSet2 = Predicates.not(Predicates.in(set2));
      return new SetView<E>() {
        @Override
        public UnmodifiableIterator<E> iterator() {
          return Iterators.filter(set1.iterator(), notInSet2);
        }
  
        @Override
        public int size() {
          return Iterators.size(iterator());
        }
  
        @Override
        public boolean isEmpty() {
          return set2.containsAll(set1);
        }
  
        @Override
        public boolean contains(Object element) {
          return set1.contains(element) && !set2.contains(element);
        }
      };
    }