Comparable和Comparator的简单使用

Comparator

最近在公司写接口的时候遇到一个对List<Map>的排序处理。排序的依据是map里面的“DJRQ”这个键所对应的值的大小,一开始我想的是用冒泡排序甚至快速排序去做,后来看到有个类似的用外部比较器Comparator去做。看起来感觉很方便就用了,顺便复习一下,一下是我实践的代码:

public static void ListMapSort(List<Map<String,String>> list){
    Collections.sort(list, new Comparator<Map>() {
    
        @Override
        public int compare(Map o1, Map o2){
            try{
                //日期格式比较大小是通过getTime方法返回的结果进行比较
                if(o1.get("DJRQ").getTime() > o2.get("DJRQ").getTime()){
                    return -1;
                }else if(o1.get("DJRQ").getTime() > o2.get("DJRQ").getTime()){
                    return 1;
                }else{
                    return 0;
                }
            }catch (Exception ex){
            }      
            return 0;
        }
    }
}

该方法首先调用的是Collection工具类的其中的一个sort方法,这里的sort方法需要两个参数,一个是待排序的List,另一个是排序规则,也就是外部比较器Comparator,当你创建这个外部比较器的时候,他会有个compare方法让你去写排序逻辑。这样,一个根据   ”DJRQ“的值进行降序的排序方法就已经写出来了。

Comparable

假设一个这样的应用场景:需要对一个List<People>进行排序,排序规则是根据People对象里面的age字段的值进行升序。一下是代码

public class People implements Comparable {

    int age;

    @Override
    public int compareTo(Object o){
        People p = (People)o;
        return this.age - people.getAge();
    }

    ....此处省略get、set以及构造方法

    //下面是main方法测试
    public staic void main(String[] args){
        //先构造一个List<People>
        People p1 = new People(2);
        People p1 = new People(1);
        People p1 = new People(3);
        List<People> list = new ArrayList<>();
        list.add(p1);list.add(p2);list.add(p3);

        //调用Collections的sort方法
        Conllections.sort(list);
        //控制台输出结果测试
        for(int i = 0; i < list.size(); i++){
            System.out.println(list.get(i).getAge());
        }
    }


}

这里使用的是Collections的sort方法来对List<People>进行排序,和上面sort是重载关系。要想调用这个sort方法的List得具备一个条件就是,List里面存的对象得实现Comparable接口。这里,People对象实现了Comparable接口,要实现的方法就是compareTo方法,也就是排序规则,这里的排序规则是升序,如果想要降序的话,把减号前后的对象位置互换即可。

总结

我们可以对实现了Comparable接口(内部比较器)的对象列表进行排序,通过Collecations的sort方法。

我们可以下写个外部比较器Comparator来对对象列表进行排序,通过Collections的sort方法。

这两个sort方法是重载关系,参数不一样。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值