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]