/**
   * 排序并且按区间值划分
   *
   * @param groups
   */
  public void orderAndRange() {
    if (groups == null || groups.size() == 0) {
      return;
    }

    if (groups.size() == 1) {
      groups.get(0).setRange(new NumberRange(0, Long.MAX_VALUE));
    }

    // 超过2条路由组按区间值划分
    // 必须按照StartId ASC排序
    Collections.sort(groups, this);

    for (int i = 0; i < groups.size(); i++) {
      RoutingGroup tmp = groups.get(i);
      Long nextSi = getStartId(i, Direction.NEXT);
      Long si = getStartId(i, Direction.INPLACE);
      tmp.setRange(new NumberRange(si, nextSi));
    }
  }
 @Override
 public int compare(RoutingGroup o1, RoutingGroup o2) {
   return o1.getStartId().intValue() - o2.getStartId().intValue();
 }