/** * Order sort groups by increasing totalOutputTupleSize. This minimizes the total volume of data * that needs to be sorted. */ public void orderSortGroups() { Collections.sort( sortGroups, new Comparator<SortGroup>() { public int compare(SortGroup sg1, SortGroup sg2) { Preconditions.checkState(sg1.totalOutputTupleSize > 0); Preconditions.checkState(sg2.totalOutputTupleSize > 0); int diff = sg1.totalOutputTupleSize - sg2.totalOutputTupleSize; return (diff < 0 ? -1 : (diff > 0 ? 1 : 0)); } }); for (SortGroup sortGroup : sortGroups) { sortGroup.orderWindowGroups(); } }