基于枚举对 TreeMap 进行排序

Sort TreeMap based on a Enum

我有一个树图:

TreeMap<String, List<MyObject>> myTreeMap = new TreeMap<String, List<MyObject>>(new MyComparator());

我想根据 enum.

的顺序对这个 TreeMap 进行排序

MyActionEnum:

public enum MyActionEnum implements Serializable {

    ADD("Add"),
    UPDATE("Update"),
    DELETE("Delete");

    private String action;
    private static final long serialVersionUID = 1L;

    MyActionEnum(String action) {
        this.action = action;
    }

    public String get() {
        return this.action;
    }

}

这样在我的 TreeMap 中,顺序应该是 添加、更新、删除

我的比较器:

public class MyComparator implements Comparator<String> {

    @Override
    public int compare(String o1, String o2) {
        // how to compare here based on enum.
    }
}

首先,您需要一种从键中查找枚举值的方法。做到这一点的最佳方法是枚举本身的方法,因此它是可重用的:

public static MyActionEnum fromAction(String action) {
    for (MyActionEnum e : values())
        if (e.action.equals(action))
            return e;
    if (action == null)
        throw new NullPointerException("Action is null");
    throw new IllegalArgumentException("Unknown action: " + action);
}

如果有很多枚举值,您可能希望用地图查找替换此处完成的顺序搜索。

然后您可以在 compare() 方法中使用它:

@Override
public int compare(String o1, String o2) {
    return Integer.compare(MyActionEnum.fromAction(o1).ordinal(),
                           MyActionEnum.fromAction(o2).ordinal());
}