【发布时间】:2013-02-12 01:24:01
【问题描述】:
我有一个包含大约 70 个字段的枚举。
我希望其中 10 个按特定顺序显示,然后我希望其余的使用比较器按字母顺序显示。我已经尝试了很多东西,但我无法让它发挥作用。
这是一个带有 reduce 属性的示例枚举 我希望首先显示 Picard、Worf 和 William,然后按字母顺序显示其余部分
我不能使用任何第三个库。它必须是java核心。因此,如果您想提供 guava 答案,或者 apache commons 答案,请在 java core 之外提供。
public enum StarTrek {
JeanLucPicard("Picard"),
GeordiLaForge("Geordi"),
DiannaTroi("Dianna"),
Worf("Worf"),
WilliamRiker("William"),
Q("Q");
private String label;
StarTrek(String label) { this.label = label; }
@Override public String toString() { return label; }
}
List<StarTrek> specificOrder = Arrays.asList(StarTrek.JeanLucPicard, StarTrek.Worf, StarTrek.WilliamRiker);
Comparator<StarTrek> comp = new Comparator<StarTrek>() {
@Override
public int compare(StarTrek o1, StarTrek o2) {
//TODO: loop through the specific order, and display those first, then for the rest, go alphabetic
return 0;
}
};
List<StarTrek> all = Arrays.asList(StarTrek.values());
Collections.sort(all, comp);
【问题讨论】:
-
为什么不分两步做呢?
-
我已经通过不使用排序来解决它,只是在集合中删除和添加,但我想使用排序来解决它。它好多了。我也只想调用一次排序
-
我不太确定它是否更好。两个步骤对我来说更具可读性,并阻止您使用仅用于显示的元数据污染您的枚举类。
-
在这种情况下,请按照其他人的建议进行操作。
标签: java list sorting collections comparator