使用場景:
某個集合封裝的是 一個uservo對象(比如uservo中有屬性 id, name, priority(優先級) ,pid(部門id))
現在要根據集合中uservo對象的部門優先級先排 然後根據 個人的優先級排,這種情況就可以拼湊一個臨時的vo,
封裝在一個集合中,然後就可以根據以下方法對集合進行排序
當然,有些大牛可以自己拼sql語言,把這個需求按優先級排好,但是我不會,隻想到了下面這個方法,哈哈~~
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;
}
});
}