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