java实体集合多字段排序
首先我们定义了一个实体类Student,集合中添加一些乱序数据,然后借助Collections类sort静态方法,通过传入自定义比较器Comparator来实现指定字段排序功能,代码如下:
static class Student {
public String name;
public int group;
public int score;
public Student(String name, int group, int score) {
this.name = name;
this.group = group;
this.score = score;
}
}
public static void main(String[] args) {
List<Student> list = new ArrayList<>();
list.add(new Student("张三", 1, 88));
list.add(new Student("李四", 2, 89));
list.add(new Student("王五", 1, 87));
list.add(new Student("赵六", 2, 90));
System.out.println("---排序前---");
for (Student student : list) {
System.out.println(student.name + "-" + student.group + "-" + student.score);
}
//按照 group升序 score降序 排序
Collections.sort(list, new Comparator<Student>() {
@Override
public int compare(Student a, Student b) {
if (a.group != b.group) {
return a.group > b.group ? 1 : -1;
}
if (a.score != b.score) {
return a.score < b.score ? 1 : -1;
}
return 0;
}
});
System.out.println("---排序后---");
for (Student student : list) {
System.out.println(student.name + "-" + student.group + "-" + student.score);
}
}
执行结果:
---排序前---
张三-1-88
李四-2-89
王五-1-87
赵六-2-90
---排序后---
张三-1-88
王五-1-87
赵六-2-90
李四-2-89
Process finished with exit code 0
通过日志可以看到,乱序数据在排序后按照 “group升序” “score降序” 进行输出。