有时,我们会需要对一个存放自定义bean对象的列表进行排序。
举例讲解,如List<Student>,其中Student有grade(年级)和score(分数)属性,要求先按照grade升序,若grade一样,再按照score降序排序。
定义Student类时,需实现Comparable<T>接口,重写compareTo方法:
/*
* Student类
* name,grade、score两个属性
*/
public class Student implements Comparable<Student>
{
private String name;
private int grade;
private int score;
@Override
public int compareTo(Student o)
{
if (null == o)
{
return -1;
}
// grade小的排前面
if (this.grade < o.getGrade())
{
return -1;
// grade大的排后面
} else if (this.grade > o.getGrade())
{
return 1;
// 若grade相同,则比较score
} else
{
// score小的排后面
if (this.score < o.getScore())
{
return 1;
// score大的排前面
} else if (this.score > o.getScore())
{
return -1;
} else
{
return 0;
}
}
}
@Override
public String toString()
{
return this.name + "," + this.grade + "," + this.score;
}
/*
* getter and setter
*/
}
其中compareTo(Student o)方法中,若this.grade<o.grade,返回-1,表示年级小的在前;
同理,this.score<o.score,返回1,表示分数大的在前;
编写测试类:
public class TestSort
{
public static void main(String[] args)
{
List<Student> stulist = new ArrayList<Student>();
// 初始化学生对象,添加到list中
stulist.add(new Student("Curry", 4, 95));
stulist.add(new Student("Harden", 5, 92));
stulist.add(new Student("James", 5, 94));
stulist.add(new Student("Kobe", 6, 91));
stulist.add(new Student("Durant", 4, 94));
stulist.add(new Student("Rose", 5, 97));
// 利用Collections工具进行排序
Collections.sort(stulist);
// 输出验证
for (Student s : stulist)
{
System.out.println(s);
}
}
}
控制台输出结果: