我有一个要求,比如我需要根据属性文件条目上定义的某个顺序对 Map 中的键进行排序。因此输出应该根据用户在属性条目上定义的顺序来。为此,我尝试使用TreeMap
and Comparator
。
我的属性文件条目是
seq=People,Object,Environment,Message,Service
以下是我的代码:
Properties prop=new Properties();
prop.load(new FileInputStream("D:\\vignesh\\sample.properties"));
final String sequence=prop.getProperty("seq");
// Display elements
final String sequence=prop.getProperty("seq");
System.out.println("sequence got here is "+sequence);
//Defined Comparator
Comparator<String> comparator = new Comparator<String>() {
@Override
public int compare(String key1, String key2) {
return sequence.indexOf(key1) - sequence.indexOf(key2);
}
};
SortedMap<String,String> lhm = new TreeMap<String,String>(comparator);
// Put elements to the map
lhm.put("Object", "biu");
lhm.put("Message", "nuios");
lhm.put("Service", "sdfe");
lhm.put("People", "dfdfh");
lhm.put("Environment", "qwe");
lhm.put("Other", "names");
lhm.put("Elements", "ioup"); //Not showing in output
lhm.put("Rand", "uiy"); //Not showing in output
//Iterating Map
for(Entry<String, String> entry : lhm.entrySet()) {
System.out.println(entry.getKey());
}
输出
sequence got here is People,Object,Environment,Message,Service
Other
People
Object
Environment
Message
Service
现在我对这段代码有一些问题。
我的地图中有近 8 个元素。但输出仅显示 6 个元素。为什么最后两个元素没有出现?
与序列不匹配的值现在在顶部。
我想在底部得到那些。有没有办法?在这里,我已经声明了从属性文件中读取的字符串,
final
这样我就不能每次都更改属性。当我
删除最终标识符时,它在我的 IDE 中显示错误。我怎样才能
避免这种情况?我在 HashMap 中的键可能不完全等于属性条目
序列。所以我需要检查该序列是否包含在我的 HashMap 键中。我需要为此更改比较器吗?