Java的Comparator自定义排序接口

Collections.sort(List<T> list,Comparator<? super T> c);方法

 

例如有如下集合:

List<Map<String, Object>> list = new ArrayList<Map<String,Object>>();

集合内的值为:

{name=zs, age=23},

{name=ls, age=25},

{name=ww, age=22},

{name=zl, age=37},

{name=qq, age=18}

 

 

我们要根据age的值给集合中的元素排序

使用Collections.sort(List<T> list,Comparator<? super T> c);方法

Collections.sort(list, new Comparator<Map<String, Object>>()
{
    @Override
    public int compare(Map<String, Object> o1, Map<String, Object> o2)
    {
        return 0;
    }
});

 

 

Comparator接口实现compare方法

经过踩坑,知道了compare方法两个参数代表的意义

o1代表后一个元素,o2代表前一个元素

例如上述list集合,当方法进行第一次比较时,o1是{name=ls, age=25},o2是{name=zs, age=23}

 

compare方法的返回值是0、正整数、负整数

当返回0或正整数时,元素排序不变

当返回负整数时,元素调换位置

 

例如我们要将上述list集合按照升序排列,代码如下:

Collections.sort(list, new Comparator<Map<String, Object>>()
{
    @Override
    public int compare(Map<String, Object> o1, Map<String, Object> o2)
    {
        // o1代表着后一个元素,o2代表前一个元素
        int ageF = (int)o1.get("age");
        int ageB = (int)o2.get("age");
        
        // 容易理解的代码
        if (ageF >= ageB)
        {// 如果后一个元素的值大于或等于前一个元素的值,元素位置不变
            return 1;
        }
        else
        {// 如果后一个元素的值小于前一个元素的值,代码位置调换
            return -1;
        }
        
        // 上述代码可简化为:
        // return ageF - ageB;
    }
});

遍历执行后的集合:

list.forEach(map->System.out.println(map.get("name").toString() + ":" + map.get("age")));得到结果:

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值