package com.diandi.demo.util;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;
/**
* *******************************************************************************
* ********* Author : klob(kloblic@gmail.com) .
* ********* Date : 2014-11-29 .
* ********* Time : 11:46 .
* ********* Project name : Diandi1.18 .
* ********* Version : 1.0
* ********* Copyright @ 2014, klob, All Rights Reserved
* *******************************************************************************
*/
@SuppressWarnings("unckecked")
public class DataSortUtil<E> {
public void Sort(List<E> list, final String method, final String sort) {
Collections.sort(list, new ListComparator(method, sort));
}
private class ListComparator implements Comparator<E> {
private String method;
private String sort;
public ListComparator(String method, String sort) {
this.method = method;
this.sort = sort;
}
public int compare(E a, E b) {
int ret = 0;
try {
Method m1 = ((E) a).getClass().getMethod(method);
Method m2 = ((E) b).getClass().getMethod(method);
if (sort != null && "desc".equals(sort))//倒序
ret = m2.invoke(((E) b)).toString().compareTo(m1.invoke(((E) a)).toString());
else//正序
ret = m1.invoke(((E) a)).toString().compareTo(m2.invoke(((E) b)).toString());
} catch (NoSuchMethodException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
} catch (InvocationTargetException e) {
e.printStackTrace();
}
return ret;
}
}
}