list<Student>的排序,根據(jù)student的屬性進(jìn)行排序;
public class Student {
public Student(int id, String name, int age) {
super();
this.id = id;
this.name = name;
this.age = age;
}
private int id;
private String name;
private int age;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
@Override
public String toString() {
return "Student [age=" + age + ", id=" + id + ", name=" + name + "]";
}
}
============================================================
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;
public class Test {
@SuppressWarnings("unchecked")
public static void Sort(List<Student> list, final String method, final String sort){
Collections.sort(list, new Comparator() {
public int compare(Object a, Object b) {
int ret = 0;
try{
Method m1 = ((Student)a).getClass().getMethod(method, null);
// 或者 getClass().getDeclaredMethod(monthod,new Class[] {參數(shù)類型.class});
Method m2 = ((Student)b).getClass().getMethod(method, null);
if(sort != null && "desc".equals(sort))//倒序
ret = m2.invoke(((Student)b), null).toString().compareTo(m1.invoke(((Student)a), null).toString());
else//正序
ret = m1.invoke(((Student)a), null).toString().compareTo(m2.invoke(((Student)b), null).toString());
}catch(NoSuchMethodException ne){
System.out.println(ne);
}catch(IllegalAccessException ie){
System.out.println(ie);
}catch(InvocationTargetException it){
System.out.println(it);
}
return ret;
}
});
}
public static void main(String[] args) {
Student s1=new Student(1,"ajuanjuan",29);
Student s2=new Student(5,"gjuanjuan",28);
Student s3=new Student(8,"tjuanjuan",24);
Student s4=new Student(6,"bjuanjuan",25);
List<Student> list=new ArrayList<Student>();
list.add(s1);
list.add(s2);
list.add(s3);
list.add(s4);
System.out.println("排序之前++++++++++++++");
for(Student s :list){
System.out.println("s+++之前"+s.toString());
}
System.out.println("開始排序++++++++++++++");
//根據(jù)age排序
Sort(list, "getAge","dese" );
System.out.println("排序之后++++++++++++++");
for(Student s :list){
System.out.println("s+++之后"+s.toString());
}
}
}