在java中将列表按特定顺序排序
实现列表自定义排序的最佳方法是什么 我有下面的常量列表在java中将列表按特定顺序排序,java,string,list,sorting,Java,String,List,Sorting,实现列表自定义排序的最佳方法是什么 我有下面的常量列表 ENERGY_POLICY, OBJECTIVE, TRAINING, SEU_REPORT, ENERGY_PERFORMANCE, INTERNAL_AND_EXTERNAL_PARTIES, INTERNAL_AUDIT_REVIEW, LEGAL_REQUIREMENTS_REVIEW, TASKS_REVIEW, CORRECTIVE_ACTIONS 我想实现一个sort函数,按照下面显示的特定顺序对它们进行排序 [OBJECT
ENERGY_POLICY, OBJECTIVE, TRAINING, SEU_REPORT, ENERGY_PERFORMANCE, INTERNAL_AND_EXTERNAL_PARTIES, INTERNAL_AUDIT_REVIEW, LEGAL_REQUIREMENTS_REVIEW, TASKS_REVIEW, CORRECTIVE_ACTIONS
我想实现一个sort函数,按照下面显示的特定顺序对它们进行排序
[OBJECTIVE, ENERGY_POLICY, TRAINING, ENERGY_PERFORMANCE, INTERNAL_AUDIT_REVIEW, LEGAL_REQUIREMENTS_REVIEW, TASKS_REVIEW, SEU_REPORT, CORRECTIVE_ACTIONS, INTERNAL_AND_EXTERNAL_PARTIES]
如果您能为我指出正确的方向,我们将不胜感激。您可以将每个常量放入哈希映射中,将常量作为键,位置作为值
现在,当您收到常量时,从hashmap中获取它应该位于的位置,并基于它创建最终列表,您可以尝试以下操作
List<String> strings = Arrays.asList("OBJECTIVE", "ENERGY_POLICY", "TRAINING", "ENERGY_PERFORMANCE", "INTERNAL_AUDIT_REVIEW", "LEGAL_REQUIREMENTS_REVIEW", "TASKS_REVIEW, SEU_REPORT", "CORRECTIVE_ACTIONS", "INTERNAL_AND_EXTERNAL_PARTIES");
Map<String, Integer> ranks = new HashMap<>();
// Assign rank to each element and store in ranks map. This map will be used for retrieving rank of each element while defining custom sorter
for (int i =0 ; i< strings.size() ; i++) {
ranks.put(strings.get(i),i);
}
// Now lets take a list which needs to sorted based on above order
List<String> stringsToBeSorted = Arrays.asList("ENERGY_POLICY", "OBJECTIVE", "TRAINING", "SEU_REPORT", "ENERGY_PERFORMANCE", "INTERNAL_AND_EXTERNAL_PARTIES", "INTERNAL_AUDIT_REVIEW", "LEGAL_REQUIREMENTS_REVIEW", "TASKS_REVIEW", "CORRECTIVE_ACTIONS");
stringsToBeSorted.sort(new Comparator<String>() {
@Override
public int compare(String str1, String str2) {
if (ranks.get(str1) == null || ranks.get(str2) == null) {
return 0;
}
return ranks.get(str1) - ranks.get(str2);
}
});
但您需要确保strings具有所有值,并且stringsToBeSorted列表中不应有字符串列表中不存在的值。由于它将抛出空指针异常,因为它从hashmap检索到的秩为空,我们如何知道,例如,
目标
应该在能源政策
之前排序,而纠正措施
应该在两者之后排序?请显示一些代码。这些常数是什么?它们是枚举吗?文件中的字符串?静态变量名?//他们是如何“进来的”?//您试图编写什么程序?您被困在哪里?
stringsToBeSorted.sort(Comparator.comparingInt(ranks::get));