import java.lang.reflect.Method;
import java.math.BigDecimal;
import java.text.Collator;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;
import java.util.Locale;
public class SortList<T> {
private Class<T> classType;
public SortList(Class<T> classType){
this.classType = classType;
}
public List<T> getSortList(List<T> list,final String sortFile,final String sortTYpe){
Collections.sort(list, new Comparator<T>() {
@Override
public int compare(T o1, T o2) {
Method method = getFileMethod(classType, sortFile);
try {
if(method.invoke(o1) == null || method.invoke(o2) == null){
return 0;
}
Collator collator = Collator.getInstance(Locale.CHINA);
String result1 = "";
String result2 = "";
if(method.getReturnType().getSimpleName().equals("String")){
result1 = (String)method.invoke(o1);
result2 = (String)method.invoke(o2);
if("ASC".equals(sortTYpe.toUpperCase())){
return collator.compare(result1, result2);
}
return -1*collator.compare(result1, result2);
}else{
result1 = method.invoke(o1).toString();
result2 = method.invoke(o2).toString();
if("ASC".equals(sortTYpe.toUpperCase())){
return new BigDecimal(result1).compareTo(new BigDecimal(result2));
}
return new BigDecimal(result2).compareTo(new BigDecimal(result1));
}
} catch (Exception e) {
e.printStackTrace();
}
return 0;
}
});
return list;
}
//获取指定字段的get方法名
private Method getFileMethod(Class<T> clazz,String sortFile){
Method mthod = null;
try {
mthod = clazz.getMethod("get" + sortFile.substring(0,1) + sortFile.substring(1));
} catch (NoSuchMethodException | SecurityException e) {
e.printStackTrace();
}
return mthod;
}
}
对list集合中的实体类按照实体类的指定字段对实体类进行排序
最后编辑于 :
©著作权归作者所有,转载或内容合作请联系作者
- 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
- 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
- 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...