我想用字符串对地图进行排序,以便某些字符串按优先顺序排列,其余按照惯例排序。在排序地图时优先考虑某些字符串的最佳方法
像这样:
"Dan", "value" //priority 1
"Eric", "value" //priority 2
"Ann", "value" //priority 3
"Bella", "value" //no priority
"Chris", "value" //no priority
就像在this问题。
我使用TreeMap和我目前的比较方法是这样的:
public int compare(String o1, String o2) {
if (o1.equals(o2)) return 0;
if (o1.equals("Dan")) return -1;
if (o2.equals("Dan")) return 1;
if (o1.equals("Eric")) return -1;
if (o2.equals("Eric")) return 1;
if (o1.equals("Ann")) return -1;
if (o2.equals("Ann")) return 1;
else return o1.compareTo(o2);
}
正如你所看到的,这得到更优先的字符串相当繁琐。
有没有更好的方法来做到这一点?
解决方案(感谢阿米特的想法): 使用第二映射到存储的优先级:
TreeMap<String, Integer> prio = new TreeMap<>();
prio.put("Dan", 1);
prio.put("Eric", 2);
prio.put("Ann", 3);
comparator = new Comparator<String>() {
@Override
public int compare(String o1, String o2) {
if (prio.containsKey(o1)) {
if (prio.containsKey(o2)) {
return prio.get(o1).compareTo(prio.get(o2));
} else return -1;
} else if (prio.containsKey(o2)) {
return 1;
} else return o1.compareTo(o2);
}
};
以哪种方式排列优先顺序?通过枚举?按其他标准? – sodik 2015-01-04 12:26:02
我想给某些字符串一个硬编码的优先级。 (我相应地编辑了这个问题) – 2015-01-04 12:35:55