一般对list排序可以使用Collections.sort(list),但如果list中包含的是对象,这种方法是行不通的。
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;
public class SortList<E> {
@SuppressWarnings("unchecked")
public void Sort(List<E> 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 = ((E) a).getClass().getMethod(method, null);
Method m2 = ((E) b).getClass().getMethod(method, null);
if (sort != null && "desc".equals(sort))// 倒序
ret = m2.invoke(((E) b), null).toString().compareTo(
m1.invoke(((E) a), null).toString());
else
// 正序
ret = m1.invoke(((E) a), null).toString().compareTo(
m2.invoke(((E) 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;
}
});
}
}
测试类
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
public class TestSortList {
public static void main(String[] args) throws Exception {
List<UserInfo> list = new ArrayList<UserInfo>();
SimpleDateFormat formater = new SimpleDateFormat("yyyy-MM-dd");
list.add(new UserInfo(3, "b", formater.parse("1980-12-01")));
list.add(new UserInfo(1, "c", formater.parse("1980-10-01")));
list.add(new UserInfo(2, "a", formater.parse("1973-10-01")));
System.out.println("-------The Original List-------------------");
for (UserInfo user : list) {
System.out.println(user.toString());
}
// 调用排序通用类
SortList<UserInfo> sortList = new SortList<UserInfo>();
// 按userId降序排序
sortList.Sort(list, "getUserId", "desc");
System.out.println("--------Desc Ordered by userId------------------");
for (UserInfo user : list) {
System.out.println(user.toString());
}
}
}
package com.sun.demo; import java.util.Date; public class UserInfo { public int userId; public String username; public Date BirthDate; public UserInfo(int userId, String username, Date birthDate) { super(); this.userId = userId; this.username = username; BirthDate = birthDate; } public int getUserId() { return userId; } public void setUserId(int userId) { this.userId = userId; } public String getUsername() { return username; } public void setUsername(String username) { this.username = username; } public Date getBirthDate() { return BirthDate; } public void setBirthDate(Date birthDate) { BirthDate = birthDate; } }