public interface Ordered { /** * Useful constant for the highest precedence value. * * @see java.lang.Integer#MIN_VALUE */ int HIGHEST_PRECEDENCE = Integer.MIN_VALUE; /** * Useful constant for the lowest precedence value. * * @see java.lang.Integer#MAX_VALUE */ int LOWEST_PRECEDENCE = Integer.MAX_VALUE; /** * 默认值 */ int DEFAULT_PRECEDENCE = 0; /** * Return the order value of this object, with a * higher value meaning greater in terms of sorting. * <p>Normally starting with 0 or 1, with {@link #LOWEST_PRECEDENCE} * indicating greatest. Same order values will result in arbitrary * positions for the affected objects. * <p>Higher value can be interpreted as lower priority, * consequently the first object has highest priority * (somewhat analogous to Servlet "load-on-startup" values). * <p>Note that order values below 0 are reserved for framework * purposes. Application-specified values should always be 0 or * greater, with only framework components (internal or third-party) * supposed to use lower values. * * @return the order value * @see #LOWEST_PRECEDENCE */ int getOrder(); }
public class OrderUtil { public static void order(List<? extends Ordered> orderList) { Collections.sort(orderList, new Comparator<Ordered>() { public int compare(Ordered o1, Ordered o2) { if (o1 != null && o2 != null) { return o1.getOrder() > o2.getOrder() ? 1 : (o1.getOrder() == o2.getOrder() ? 0 : -1); } return 0; } }); } }