基于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—

猜你喜欢

转载自blog.csdn.net/hsg77/article/details/130390943
今日推荐