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

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

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

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 Test {??
??? 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<Test> userList = new ArrayList();??
??????? Test test = new Test();??
??????? test.setId(null);??
??????? userList.add(test);??
?
??????? for (long i = 0; i < 5; i++) {??
??????????? test = new Test();??
??????????? 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());??
??????? }??
?
??? }??
?
}?