Java Data Type How to - Create Comparator for enum value








Question

We would like to know how to create Comparator for enum value.

Answer

import java.util.Arrays;
import java.util.Comparator;
import java.util.List;
import java.util.Set;
import java.util.TreeSet;
/*  w w w .  jav  a 2  s.c om*/
public class Main {
    public static void main(final String[] args) {
        List list = Arrays.asList(new DAY[] { DAY.MON, DAY.WED, DAY.TUE, DAY.THU,
                DAY.SUN, DAY.SAT, DAY.FRI });

        Set set = new TreeSet();
        set.addAll(list);
        for (final DAY day : set) {
            System.out.println(day.getName());
        }
        System.out.println("new order:");
        set = new TreeSet(new DAYComparator());
        set.addAll(list);
        for (final DAY day : set) {
            System.out.println(day.getName());
        }
    }
}
enum DAY {
  MON("MONDAY", 1), 
  TUE("TUESDAY", 2), 
  WED("WEDNESDAY", 3), 
  THU("THURSDAY", 4), 
  FRI("FRIDAY", 5), 
  SAT("SATURDAY", 6), 
  SUN("SUNDAY", 0);

  private String name;
  private int index;

  DAY(String name, int index) {
      this.name = name;
      this.index = index;
  }
  public String getName() {
    return name;
  }
  public int getIndex() {
    return index;
  }
  
}
class DAYComparator implements Comparator {

  @Override
  public int compare(final DAY o1, final DAY o2) {
      int returnValue = 0;
      if (o1.getIndex() > o2.getIndex()) {
          returnValue = 1;
      } else if (o1.getIndex() < o2.getIndex()) {
          returnValue = -1;
      }
      return returnValue;
  }
}

The code above generates the following result.

MONDAY
TUESDAY
WEDNESDAY
THURSDAY
FRIDAY
SATURDAY
SUNDAY
new order:
SUNDAY
MONDAY
TUESDAY
WEDNESDAY
THURSDAY
FRIDAY
SATURDAY