java如何对ArrayList中对象按照该对象某属性排序

来源:百度知道 编辑:UC知道 时间:2024/06/17 10:56:07
public static void display (Collection c){
Iterator it = c.iterator ();
while (it.hasNext()){
Object o = it.next();
System.out.println(o);
}
}

public static void main(String[] args) {

Student stu1 = new Student (1,"zhangsan","male",18,"cs");
Student stu2 = new Student (2,"lisi","female",19,"cs");
Student stu3 = new Student (3,"wangwu","male",20,"cs");
Student stu4 = new Student (4,"zhaoliu","female",21,"cs");
Student stu5 = new Student (5,"xiaoming","male",22,"cs");

ArrayList<Student> List = new ArrayList<Student>();
List.add(stu1);
List.add(stu2);
List.add(stu3);
List.add(stu4);
List.add(stu5);
display(List);
熬增加排序功能,打印时:输出学生对象的时候,需要先按照年龄排序,如果年龄相同,则按照姓名排序,如果姓名也相同,则按照学号排

有几个方法可以实现:让 Student 实现Comparable接口,或是实例化一个比较器,

现在用 Comparator 比较器实例来做一个:ComparableTest.java

import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;

public class ComparableTest {
public static void main(String[] args) {
Comparator<Student> comparator = new Comparator<Student>(){
public int compare(Student s1, Student s2) {
//先排年龄
if(s1.age!=s2.age){
return s1.age-s2.age;
}
else{
//年龄相同则按姓名排序
if(!s1.name.equals(s2.name)){
return s1.name.compareTo(s2.name);
}
else{
//姓名也相同则按学号排序
return s1.id-s2.id;
}
}
}
};
Student stu1 = new Student (1,"zhangsan","male",28,"cs");
Student stu2 = new Student (2,"lisi","female",19,"cs");
Student stu3 = new Student (3,&q