java中List按照指定字段排序工具类

来源:互联网 发布:网络促销方案例文 编辑:程序博客网 时间:2024/06/10 13:59

文章标题:java中List按照指定字段排序工具类.

文章地址: http://blog.csdn.net/5iasp/article/details/17717179

 

包括如下几个类

 

1. 实体类

 

package com.newyear.wish;/** * 实体类 * */public class Video {public Video(int id, String title, int hits) {super();this.id = id;this.title = title;this.hits = hits;}private int id;private String title;private int hits;public int getId() {return id;}public void setId(int id) {this.id = id;}public String getTitle() {return title;}public void setTitle(String title) {this.title = title;}public int getHits() {return hits;}public void setHits(int hits) {this.hits = hits;}}


2. list排序工具类

 

package com.newyear.wish;import java.lang.reflect.Method;import java.util.ArrayList;import java.util.Collections;import java.util.Comparator;import java.util.List;/** *  List按照指定字段排序工具类 * * @param <T> */public class ListSortUtil<T> {/** * @param targetList 目标排序List * @param sortField 排序字段(实体类属性名) * @param sortMode 排序方式(asc or  desc) */@SuppressWarnings({ "unchecked", "rawtypes" })public void sort(List<T> targetList, final String sortField, final String sortMode) {Collections.sort(targetList, new Comparator() {public int compare(Object obj1, Object obj2) { int retVal = 0;try {//首字母转大写String newStr=sortField.substring(0, 1).toUpperCase()+sortField.replaceFirst("\\w",""); String methodStr="get"+newStr;Method method1 = ((T)obj1).getClass().getMethod(methodStr, null);Method method2 = ((T)obj2).getClass().getMethod(methodStr, null);if (sortMode != null && "desc".equals(sortMode)) {retVal = method2.invoke(((T) obj2), null).toString().compareTo(method1.invoke(((T) obj1), null).toString()); // 倒序} else {retVal = method1.invoke(((T) obj1), null).toString().compareTo(method2.invoke(((T) obj2), null).toString()); // 正序}} catch (Exception e) {throw new RuntimeException();}return retVal;}});}}


3. 测试类

package com.newyear.wish;import java.util.ArrayList;import java.util.List;public class ListSortUtilTest {/** * @param args */public static void main(String[] args) {List<Video> targetList = new ArrayList<Video>();targetList.add(new Video(1,"title1",31));targetList.add(new Video(2,"title2",12));targetList.add(new Video(3,"title3",53));System.out.println("排序前: " + targetList);ListSortUtil<Video> sortList = new ListSortUtil<Video>();sortList.sort(targetList, "hits", "asc");System.out.println("排序后:" +targetList);}}


 


测试执行结果:

排序前: [com.newyear.wish.Video@c17164, com.newyear.wish.Video@1fb8ee3, com.newyear.wish.Video@61de33]
排序后:[com.newyear.wish.Video@1fb8ee3, com.newyear.wish.Video@c17164, com.newyear.wish.Video@61de33]

 

4 0
原创粉丝点击