问题:
集合里面的数据:
list.add("呆账");
list.add("代偿");
list.add("哈哈哈");
list.add("呆账");
list.add("嘿嘿");
list.add("正常");
排序规则:
sortRule.put("正常",0);
sortRule.put("冻结",1);
sortRule.put("呆账",2);
sortRule.put("止付",3);
sortRule.put("代偿",4);

实现:
1、比较的时候是比的排序规则的权重值。
2、如果排序规则里面则放到最后。
3、排序规则里面没有放到最后。
private static void stringSortByRule(List<String> list) {
Map<String,Integer> sortRule=new HashMap();
sortRule.put("正常",0);
sortRule.put("冻结",1);
sortRule.put("呆账",2);
sortRule.put("止付",3);
sortRule.put("代偿",4);
Collections.sort(list, new Comparator<String>() {
@Override
public int compare(String o1, String o2) {
Integer rule1=sortRule.get(o1);
Integer rule2=sortRule.get(o2);
if(null==rule1){
rule1=sortRule.size();
}
if(null==rule2){
rule2=sortRule.size();
}
return rule1-rule2;
}
});
}
既然要排序,为什么不用set呢。
1、比较规则
private static void initSortRules(){
if(null==sortRule){
sortRule=new HashMap<>();
}
if(sortRule.size()<1){
sortRule.put("正常",0);
sortRule.put("冻结",1);
sortRule.put("呆账",2);
sortRule.put("止付",3);
sortRule.put("代偿",4);
}
};
2、比较器
static class accountStatusComparator implements Comparator<String> {
@Override
public int compare(String o1, String o2) {
Integer rule1 = sortRule.get(o1);
Integer rule2 = sortRule.get(o2);
if (null == rule1) {
rule1 = sortRule.size();
}
if (null == rule2) {
rule2 = sortRule.size();
}
return rule2 - rule1;
}
}
3、初始化比较规则,创建set集合,元素加入之后,自动拍好序。
initSortRules();
Set<String> accountWorstStatus=new TreeSet<>(new accountStatusComparator());
4、我要拿第一个。
accountWorstStatus.iterator().next()
版权声明:本文为xiaoWangZi89原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。