public List<RangeDimensionRange> partition( List<RangeDimensionRange> ranges, int num, Collection<Rule> rules, Aggregator aggregator) { int rangePerOutputRange = (int) (Math.ceil(1.0 * ranges.size() / num)); List<RangeDimensionRange> outputRanges = new ArrayList<RangeDimensionRange>(num); for (int i = 0; i < ranges.size(); i += rangePerOutputRange) { RangeDimensionRange dimensionRange = ranges.get(i); outputRanges.add( new RangeDimensionRange( dimensionRange.getStart(), ranges.get(Math.min(i + rangePerOutputRange, ranges.size()) - 1).getEnd(), dimensionRange.getInfo())); } return outputRanges; }