文章标题: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]