`

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

    博客分类:
  • java
阅读更多
import java.lang.reflect.Field;
import java.lang.reflect.Method;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;

/*
   Collections.sort(list,new ListComparator());
   Collections.sort(list,Collections.reverseOrder(new ListComparator()));
*/
public class ListComparator implements Comparator {

    public ListComparator() {
    }

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

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

    public Object getValue(Object bean) throws Exception {
        try {
            Field field = bean.getClass().getDeclaredField(fieldName);
            return field.get(bean);
        } catch (Exception ex) {
            ex.printStackTrace();
        }
        return null;
    }

    public int compare(Object obj1, Object obj2) {
        int val = -1;
        try {
            if (fieldName == null) {
                val = _compare(obj1, obj2);
            } else {
                val = _compare(getValue(obj1), getValue(obj2));
            }
        } 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;
    }

    public static void main(String[] arge) {
        //
        List list = new ArrayList();
        list.add(new Test(1));
        list.add(new Test(2));
        list.add(new Test(3));
        list.add(new Test(4));

        Collections.sort(list, Collections.reverseOrder(new ListComparator("id")));
        System.out.println(list);

        Collections.sort(list, new ListComparator("id"));
        System.out.println(list);

        list = new ArrayList();
        list.add(1);
        list.add(2);
        list.add(3);
        list.add(4);

        Collections.sort(list, Collections.reverseOrder(new ListComparator()));
        System.out.println(list);

        Collections.sort(list, new ListComparator());
        System.out.println(list);

    }

}

class Test {
    public Test(int id){
        this.id = id;
    }
    public int id;
    public String toString(){
        return String.valueOf(id);
    }
}

  

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics