【发布时间】:2015-02-04 10:54:23
【问题描述】:
考虑以下
public enum tc implements {
NORESULTS(0), GOOD_RESULTS(1), EXCELLENT_RESULTS(2), NO_DATA_AVAILABLE(5), SOME_OTHER_VALUE(4);
private final Integer value;
// Code for the constructor, getters and setters for the value****
枚举tc 值对应于下面类中的testValue。
public class TestData {
private int testID;
private String testName;
private int testValue;
....
...
}
在 Results 类中,TestDataList 必须按不同的排名顺序排序,而不是 testValue。例如,Excellent 后跟 Good Results 后跟 NoResults 等。
public class Results {
List<TestData> TestDataList = getTestData();
我可以为比较器等编写代码。问题是因为我需要对枚举进行不同的排序,以下两个选项中哪个更好 a) 在枚举 tc 中添加私有 int rankTestValue。此选项可能要求我必须编写一个 getRank(int value) 方法,该方法将根据该值返回相应的 rankTestValue。
或 b) 在结果类中添加一个映射 Map tcRankMap = new HashMap();。使用 (2,1) (1,2) 等对应于(枚举值,排名)的键值填充此地图。例如,(2,1) 将是优秀_结果具有第一排名等。
这两个选项哪个更好。如果有更好的解决方案,请告诉我。
【问题讨论】:
-
所以您想根据
tc值对TestData实例进行排序,但tc值的顺序不固定? -
我不明白为什么
testValue被声明为int而不是tc。你能解释一下吗? -
所以你的问题真的是'为一个不同于它的自然排序的枚举定义一个比较器的优雅方法是什么?对吗?