Java枚举已经内置了compareTo(..)方法,该方法使用枚举位置(也称为序数)将一个对象与另一个对象进行比较。 根据声明枚举常量的顺序确定位置,其中第一个常数的序数为零。
如果这种安排不合适,则可能需要通过添加内部字段来定义自己的比较器,如下所示:
import java.util.Comparator;
public enum Day {
MONDAY(1, 3),
TUESDAY(2, 6),
WEDNESDAY(3, 5),
THURSDAY(4, 4),
FRIDAY(5, 2),
SATURDAY(6, 1),
SUNDAY(0, 0);
private final int calendarPosition;
private final int workLevel;
Day(int position, int level) {
calendarPosition = position;
workLevel = level;
}
int getCalendarPosition(){ return calendarPosition; }
int getWorkLevel() { return workLevel; }
public static Comparator calendarPositionComparator = new Comparator() {
public int compare(Day d1, Day d2) {
return d1.getCalendarPosition() - d2.getCalendarPosition();
}
};
public static Comparator workLevelComparator = new Comparator() {
public int compare(Day d1, Day d2) {
// descending order, harder first
return d2.getWorkLevel() - d1.getWorkLevel();
}
};
}
驱动程序检查是否所有工作:
import java.util.Arrays;
import java.util.Collections;
import java.util.List;
public class EnumTest
{
public static void main (String[] args) {
List allDays = Arrays.asList(Day.values());
System.out.println("===\nListing days in order of calendar position:");
Collections.sort(allDays, Day.calendarPositionComparator);
showItems(allDays);
System.out.println("===\nListing days in order of work level:");
Collections.sort(allDays, Day.workLevelComparator);
showItems(allDays);
}
public static void showItems(List days) {
for (Day day : days) {
System.out.println(day.name());
}
}
}