code: public static SplitExtractsResult splitExtractsByPredicate(
        Multimap<Extract, WorkUnitState> extractToWorkUnitStateMap, Predicate<WorkUnitState> predicate) {
      Multimap<Extract, WorkUnitState> retained = ArrayListMultimap.create();
      Multimap<Extract, WorkUnitState> filtered = ArrayListMultimap.create();
      for (Map.Entry<Extract, Collection<WorkUnitState>> entry : extractToWorkUnitStateMap.asMap().entrySet()) {
        if (Iterables.all(entry.getValue(), predicate)) {
          retained.putAll(entry.getKey(), entry.getValue());
        } else {
          filtered.putAll(entry.getKey(), entry.getValue());
        }
      }
      return new SplitExtractsResult(retained, filtered);
    }
docs: Given a {@link Multimap} of {@link Extract}s to {@link WorkUnitState}s, filter out any {@link Extract}s where all
  of the corresponding {@link WorkUnitState}s do not meet the given {@link Predicate}.
  <ul>
  <li> The filtered {@link Extract}s will be available in {@link SplitExtractsResult#getFiltered()}</li>
  <li> The {@link Extract}s satisfying the predicated will be available in {@link SplitExtractsResult#getRetained()}</li>
  </ul>