最近在一个项目中遇到需要将一个list集合根据时间进行排序的情况,于是,写出了以下方法,为了便于展示方法,我们首先建一个实体类
package test;
import java.util.Date;
public class User {
private int userid;
private String username;
private Date BirthDatestr;
private int num;
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 getBirthDatestr() {
return BirthDatestr;
}
public void setBirthDatestr(Date birthDatestr) {
BirthDatestr = birthDatestr;
}
public int getNum() {
return num;
}
public void setNum(int num) {
this.num = num;
}
public UserInfo(int userid, String username, Date birthDatestr, int num) {
super();
this.userid = userid;
this.username = username;
BirthDatestr = birthDatestr;
this.num = num;
}
}
之后是排序方法
import java.lang.reflect.InvocationTargetException;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;
import java.lang.reflect.Method;
public class SortList<E>{
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.lang.reflect.InvocationTargetException;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;
import com.haibo.manage.model.HistoryCount;
import net.sf.json.JSONArray;
public class WangTest {
public static void main(String[] args) throws ParseException {
List<UserInfo> list = new ArrayList<UserInfo>();
SimpleDateFormat formater = new SimpleDateFormat("yyyy-MM-dd");
list.add(new UserInfo(3,"b",formater.parse("1980-12-01"),11));
list.add(new UserInfo(1,"c",formater.parse("1980-10-01"),30));
list.add(new UserInfo(2,"a",formater.parse("1973-10-01"),11));
System.out.println("-------原来序列-------------------");
for(UserInfo user : list){
System.out.println(user.toString());
}
//调用排序通用类
SortList<UserInfo> sortList = new SortList<UserInfo>();
//按userId排序
sortList.Sort(list, "getUserid", "desc");
System.out.println("--------按userId倒序------------------");
for(UserInfo user : list){
System.out.println(user.getUserid());
}
//按username排序
sortList.Sort(list, "getUsername", null);
System.out.println("---------按username排序-----------------");
for(UserInfo user : list){
System.out.println(user.getUsername());
}
//按birthDate排序
sortList.Sort(list, "getBirthDatestr", null);
System.out.println("---------按birthDate排序-----------------");
for(UserInfo user : list){
System.out.println(user.getBirthDatestr());
}
}
}