【发布时间】:2021-01-16 19:18:56
【问题描述】:
我想将键值对存储在TreeMap 中,并按照以下逻辑根据键的值对条目进行排序:
- “type”(不区分大小写)键应该在第一个。
- 以“元数据”开头的键(不区分大小写)最后应按升序排列
- 其余键(不区分大小写)应按升序排列在中间
我使用的是 Java 8 版本。
程序:
public class CustomeCamarator {
public static void main(String[] args) {
CustomComparator comparator = new CustomComparator();
Map<String,Object> empData=new TreeMap<>(comparator);
empData.put("name","someName");
empData.put("DOB","someDOB");
empData.put("address","someAddress");
empData.put("type","employee data");
empData.put("ContactNo.","someContactNumber");
empData.put("metadata.source","someMetaDataSource");
empData.put("metadata.location","someMetaDataLocation");
empData.put("metadata","someMetaData");
System.out.println(empData);
System.out.println(empData.containsKey("metadata"));//should be true but showing false
}
}
class CustomComparator implements Comparator<String>{
@Override
public int compare(String o1, String o2) {
String str1 = o1.toLowerCase();
String str2 = o2.toLowerCase();
if(str1.equalsIgnoreCase("type")) {
return -1;
}else if(!str1.contains("metadata") && !str2.contains("metadata")) {
return str1.compareTo(str2);
}else if(o1.contains("metadata") && !o2.contains("metadata")) {
return 1;
}else if(!o1.contains("metadata") && o2.contains("metadata")) {
return -1;
}else {
return 1;
}
}
}
**Expected Output like this:**
type: someType
address: someAddress
ContactNo: someContactNumber
DOB: someDOB
name: someName
metadata: someMetaData
metadata.location: someMetaDataLocation
metadata.source: someMetaDataSource
【问题讨论】:
标签: java comparator treemap