使用场景:
某个集合封装的是 一个uservo对象(比如uservo中有属性 id, name, priority(优先级) ,pid(部门id))
现在要根据集合中uservo对象的部门优先级先排 然后根据 个人的优先级排,这种情况就可以拼凑一个临时的vo,
封装在一个集合中,然后就可以根据以下方法对集合进行排序
当然,有些大牛可以自己拼sql语言,把这个需求按优先级排好,但是我不会,只想到了下面这个方法,哈哈~~
/**
* 通用集合排序* @param workItemList
* @param method 按workItemList中的第一个属性排序 workItemList中实体的get方法的属性
* @param method2 按workItemList中的第二个属性排序 workItemList中实体的get方法的属性
* @param sort 第一个属性排序规则 升 or 降
* @param sort2 第二个属性排序规则 升 or 降
*/
private void arrayListSort(List workItemList, final String method, final String method2, final String sort, final String sort2) {
Collections.sort(workItemList, new Comparator() {
public int compare(Object a, Object b) {
int ret = 0;
try{
Method m1 = (a).getClass().getMethod(method, null);
Method m2 = (b).getClass().getMethod(method, null);
Method personalNum1 = (a).getClass().getMethod(method2, null);
Method personalNum2 = (b).getClass().getMethod(method2, null);
if(m1.invoke((b), null)!=null&&m2.invoke((a), null)==null) {
return 1;
}
if(m1.invoke((b), null)==null&&m2.invoke((a), null)!=null) {
return -1;
}
if(m1.invoke((b), null)==null&&m2.invoke((a), null)==null) {
return 0;
}
if(sort != null && "desc".equalsIgnoreCase(sort)) {//倒序
ret = m2.invoke((b), null).toString().compareTo(m1.invoke((a), null).toString());
if(ret==0 && "desc".equalsIgnoreCase(sort2)){
ret = personalNum2.invoke((b), null).toString().compareTo(personalNum1.invoke((a), null).toString());
}else if(ret==0 && "asc".equalsIgnoreCase(sort2)){
ret = personalNum1.invoke((a), null).toString().compareTo(personalNum2.invoke((b), null).toString());
}
}else{//正序
ret = m1.invoke((a), null).toString().compareTo(m2.invoke((b), null).toString());
if(ret==0 && "desc".equalsIgnoreCase(sort2)){
ret = personalNum2.invoke((b), null).toString().compareTo(personalNum1.invoke((a), null).toString());
}else if(ret==0 && "asc".equalsIgnoreCase(sort2)){
ret = personalNum1.invoke((a), null).toString().compareTo(personalNum2.invoke((b), null).toString());
}
}
}catch(NoSuchMethodException ne){
System.out.println(ne);
}catch(IllegalAccessException ie){
System.out.println(ie);
}catch(InvocationTargetException it){
System.out.println(it);
}
return ret;
}
});
}