基于List列表同时按两个字段进行排序的java代码

基于List列表同时按两个字段进行排序的java代码

假设有一个 Person 类,包括 name 和 age 两个字段。如果要按照 name 字段进行升序排列,如果 name 相同,则按照 age 字段进行降序排列,可以使用如下的 Java 代码:

List<Person> persons = ...; // 假设已经有了 Person 的列表
Collections.sort(persons, new Comparator<Person>() {
    @Override
    public int compare(Person p1, Person p2) {
        int cmpName = p1.name.compareTo(p2.name);
        if (cmpName != 0) {
            return cmpName;
        } else {
            return Integer.compare(p2.age, p1.age); // 注意此处将 p2.age 放在前面,表示排列为降序
        }
    }
});

上述代码中,我们使用了 Collections.sort() 方法进行排序,并传入了一个 Comparator 对象来告诉方法如何排序。在 compare() 方法中,我们首先比较了 name 字段,如果不相同,就直接返回这个比较结果,表示按照姓名升序排列。如果 name 相同,就使用 Integer.compare() 方法比较 age 字段,将其转换为降序排列。

List<DmsRes> resList = resService.findList(res);
        //按年份和行政区都升序-排序
        resList.sort(new Comparator<DmsRes>() {
            @Override
            public int compare(DmsRes r1, DmsRes r2) {
                int cmpYear= r1.getResYear().compareTo(r2.getResYear());      //按年份升级排序
                if(cmpYear!=0)
                {
                    return cmpYear;
                }
                else
                {
                    // 注意此处将 r2.getAreaCode 放在前面,表示排列为降序
                    return r1.getAreaCode().compareTo(r2.getAreaCode());      //同时按行政区升级排序
                }
            }
        });
        return JsonResult.ok(resList);

—the—end—

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值