对list集合排序,按照自定义规则

问题:
集合里面的数据:

 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版权协议,转载请附上原文出处链接和本声明。