在我的项目中,我正在使用一些属性文件.我注意到了Properties.propertyNames()的奇怪行为,它返回一个Enumeration,Enumeration的顺序相反.我做了一个测试:
文件内容是:
TT.1=Development
TT.2=Application Setup / Release
TT.3=Project Management
TT.4=Meetings and Discussions
代码是:
Enumeration> enumeration = properties.propertyNames();
while (enumeration.hasMoreElements()) {
String key = (String) enumeration.nextElement();
String value = properties.getProperty(key);
System.out.println(key + " " + value);
}
输出是:
TT.4 Application Setup / Release
TT.3 Development
TT.2 Meetings and Discussions
TT.1 Project Management
任何人都能说出背后的原因是什么?谢谢.
编辑:
由于HashTable的键是TT.X形式,其中X是一个数字,我对它进行了排序,以便做出正确的顺序.这是下一个实现:
this.taskTypeList = new ArrayList(0);
Map reverseTaskMap = new HashMap(0);
Properties properties = loadTaskProperty();
Enumeration> enumeration = properties.propertyNames();
while (enumeration.hasMoreElements()) {
String key = (String) enumeration.nextElement();
String value = properties.getProperty(key);
reverseTaskMap.put(key, value);
}
LinkedList> linkedList = new LinkedList>(reverseTaskMap.entrySet());
Collections.sort(linkedList, new Comparator>() {
public int compare(Entry object1, Entry object2) {
return Integer.valueOf(Integer.parseInt(object1.getKey().split("\\.")[1])).compareTo(Integer.valueOf(Integer.parseInt(object2.getKey().split("\\.")[1])));
}
});
for (Iterator> iterator = linkedList.iterator(); iterator.hasNext(); ) {
Map.Entry entry = (Map.Entry) iterator.next();
taskTypeList.add(entry.getValue());
}