java中List对象排序通用方法
在数据库中查出来的列表中,往往需要对不同的字段重新排序,一般的做法都是使用排序的字段,重新到数据库中查询。如果不到数据库查询,直接在第一次查出来的list中排序,无疑会提高系统的性能。
只要把第一次查出来的结果存放在session中,就可以对list重新排序了。一般对list排序可以使用Collections.sort(list),但如果list中包含是一个对象的话,这种方法还是行不通的。如果有下面这个对象:
//Test.javapackage test;import java.util.ArrayList;import java.util.List;import java.text.SimpleDateFormat;public class Test {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"),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.toString());}//按username排序sortList.Sort(list, "getUsername", null);System.out.println("---------按username排序-----------------");for(UserInfo user : list){System.out.println(user.toString());}//按birthDate排序sortList.Sort(list, "getBirthDatestr", null);System.out.println("---------按birthDate排序-----------------");for(UserInfo user : list){System.out.println(user.toString());}}}运行结果如下:
-------原来序列-------------------
3; b; 1980-12-01; 11
1; c; 1980-10-01; 30
2; a; 1973-10-01; 11
--------按userId倒序------------------
3; b; 1980-12-01; 11
2; a; 1973-10-01; 11
1; c; 1980-10-01; 30
---------按username排序-----------------
2; a; 1973-10-01; 11
3; b; 1980-12-01; 11
1; c; 1980-10-01; 30
---------按birthDate排序-----------------
2; a; 1973-10-01; 11
1; c; 1980-10-01; 30
3; b; 1980-12-01; 11
注意:日期的排序是先通过格式转换的,再来排序的,否则将不能有正确的结果。