code: private static MultiWorkUnit findAndPopBestFitGroup(WorkUnit workUnit, PriorityQueue<MultiWorkUnit> pQueue,
        double avgGroupSize) {
  
      List<MultiWorkUnit> fullWorkUnits = Lists.newArrayList();
      MultiWorkUnit bestFit = null;
  
      while (!pQueue.isEmpty()) {
        MultiWorkUnit candidate = pQueue.poll();
        if (getWorkUnitEstSize(candidate) + getWorkUnitEstSize(workUnit) <= avgGroupSize) {
          bestFit = candidate;
          break;
        }
        fullWorkUnits.add(candidate);
      }
  
      for (MultiWorkUnit fullWorkUnit : fullWorkUnits) {
        pQueue.add(fullWorkUnit);
      }
  
      return bestFit;
    }
docs: Find the best group using the best-fit-decreasing algorithm.
  The best group is the fullest group that has enough capacity for the new {@link WorkUnit}.
  If no existing group has enough capacity for the new {@link WorkUnit}, return null.