docs: public static <E> Collection<E> difference(Set<E> first, Set<E> second, Function<E, Integer> hasher) {
          if (first == null || first.size() == 0) {
              return Collections.emptyList();
          }
  
          if (second == null || second.size() == 0) {
              return first;
          }
  
          Map<Integer, E> map = new HashMap();
  
          first.stream().forEach(e -> map.put(hasher.apply(e), e));
          second.stream().forEach(e -> map.remove(hasher.apply(e)));
  
          return Collections.unmodifiableCollection(map.values());
      }