java List Collections.sort 排序 支持 对象属性 普通数据类型 升序 降序 正序 倒序 排列

package cn.itcast.itcastweb.web.servlets;

import java.lang.reflect.Method;
import java.text.SimpleDateFormat;
import java.util.*;

public class ListComparator implements Comparator {
    public ListComparator() {
    }

    public ListComparator(String methodName) {
        this.methodName = methodName;
    }

    // 空:普通的数据类型 非空:对象数据类型 取methodName返回值比较
    String methodName;

    public Object getValue(Object bean, String methodName) throws Exception {
        Method getMethod = bean.getClass().getMethod(methodName, null);
        return getMethod.invoke(bean, null);
    }

    public int compare(Object obj1, Object obj2) {
        int val = -1;
        try {
            if (methodName == null) {
                val = _compare(obj1, obj2);
            } else {
                val = _compare(getValue(obj1, methodName),
                        getValue(obj2, methodName));
            }
        } catch (Exception ex) {
            ex.printStackTrace();
        }
        return val;
    }

    public int _compare(Object obj1, Object obj2) throws Exception {
        if (obj1 == null || obj2 == null)
            return obj1 == null ? -1 : 1;
        Class cl = obj1.getClass();
        if (obj1 instanceof java.lang.Comparable) {
            // byte int long float..number, date , boolean , char
            Method getMethod = obj1.getClass().getMethod("compareTo",
                    new Class[] { cl });
            return (Integer) getMethod.invoke(obj1, new Object[] { obj2 });
        }
        return -1;
    }
}

// 测试类
class ListComparator {
    Long id;

    public Long getId() {
        return id;
    }

    public void setId(Long id) {
        this.id = id;
    }

    public static void main(String[] args) {
        // 普通数据类型 升序
        SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd");
        List list = new ArrayList();
        for (long i = 0; i < 5; i++) {
            list.add(new Date(System.currentTimeMillis()
                    + (int) (Math.random() * 1000000000)));
        }
        ListComparator c = new ListComparator();
        Collections.sort(list, c);
        for (int i = 0; i < list.size(); i++) {
            System.out.println(simpleDateFormat.format(list.get(i)));
        }
        // 对象数据类型 降序
        List<ListComparator> userList = new ArrayList();
        ListComparator test = new ListComparator();
        test.setId(null);
        userList.add(test);
        for (long i = 0; i < 5; i++) {
            test = new ListComparator();
            test.setId(i);
            userList.add(test);
        }
        c = new ListComparator("getId");
        Collections.sort(userList, Collections.reverseOrder(c));
        for (int i = 0; i < userList.size(); i++) {
            System.out.println(userList.get(i).getId());
        }
    }
}

 

posted @ 2014-11-04 20:50  贝壳风铃  阅读(2783)  评论(0)    收藏  举报