基于枚举对TreeMap进行排序



我有一个树映射:

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中,顺序应该是添加、更新、删除

MyComparator:

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);
}

如果有很多枚举值,您可能希望用Map查找来替换这里的顺序搜索

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

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

最新更新