3000pzj 发表于 2013-1-26 13:33:35

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

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);    }}  
页: [1]
查看完整版本: java List Collections.sort 排序 支持 对象属性 普通数据类型 升序 降序 正序 倒序 排列