code: private static <E> boolean retainOccurrencesImpl(
        Multiset<E> multisetToModify, Multiset<?> occurrencesToRetain) {
      checkNotNull(multisetToModify);
      checkNotNull(occurrencesToRetain);
      // Avoiding ConcurrentModificationExceptions is tricky.
      Iterator<Entry<E>> entryIterator = multisetToModify.entrySet().iterator();
      boolean changed = false;
      while (entryIterator.hasNext()) {
        Entry<E> entry = entryIterator.next();
        int retainCount = occurrencesToRetain.count(entry.getElement());
        if (retainCount == 0) {
          entryIterator.remove();
          changed = true;
        } else if (retainCount < entry.getCount()) {
          multisetToModify.setCount(entry.getElement(), retainCount);
          changed = true;
        }
      }
      return changed;
    }
docs: Delegate implementation which cares about the element type.