LIST排序
针对可以针对各种类型的集合进行排序
以下是运行的例子:
以下是结果:
public class SortUtil {
/**
* <pre>
* 1 List里面为基本型 ==> freeSort(list,boolean)
* list: 要排序的list; boolean: true 升序,false 降序
* 2 List里面为非基本型==> freeSort(list,param1,boolean,param2,boolean,param...,boolean)
* list: 要排序的list; param:排序依赖的项目;
* boolean: true 升序 ,false 降序
* 全项目自由排序
* @param list 排序的list
* @param params 必要的参数
*/
public static <C> void freeSort(List<C> list, final Object... params) {
Collections.sort(list, new Comparator<C>() {
@Override
public int compare(C c1, C c2) {
int sort = 0;
Object obj1 = null;
Object obj2 = null;
try {
if (params.length > 1) {
for (int index = 0; index < params.length / 2; index++) {
String param = (String) params[index * 2];
String[] strArr = param.split("\\.");
obj1 = getValue(c1, strArr);
obj2 = getValue(c2, strArr);
sort = getSortNum(obj1, obj2,(Boolean) params[index * 2 + 1]);
if (sort != 0) {
break;
}
}
} else if (params.length == 1) {
sort = getSortNum(c1, c2, (Boolean) params[0]);
} else {
throw new RuntimeException("入力的param数不足");
}
} catch (Exception e) {
System.out.println("[freeSort] error:" + e.getMessage());
}
return sort;
}
});
}
/**
* <pre>
* 1 List里面为基本型 ==> sort(list,boolean)
* list: 要排序的list; boolean: true 升序,false 降序
* 2 List里面为非基本型==> sort(list,param1,param2,param...,boolean)
* list: 要排序的list; param:排序依赖的项目;
* boolean: true 升序 ,false 降序
* 全项目排序
* @param list 排序的list
* @param params 必要的参数
*/
public static <C> void sort(List<C> list, final Object... params) {
Collections.sort(list, new Comparator<C>() {
@Override
public int compare(C c1, C c2) {
int sort = 0;
Object obj1 = null;
Object obj2 = null;
try {
if (params.length > 1) {
for (int index = 0; index < params.length-1; index++) {
String param = (String) params[index];
String[] strArr = param.split("\\.");
obj1 = getValue(c1, strArr);
obj2 = getValue(c2, strArr);
sort = getSortNum(obj1, obj2,(Boolean) params[params.length-1]);
if (sort != 0) {
break;
}
}
} else if (params.length == 1) {
sort = getSortNum(c1, c2, (Boolean) params[0]);
} else {
throw new RuntimeException("入力的param数不足");
}
} catch (Exception e) {
System.out.println("[sort] error:" + e.getMessage());
}
return sort;
}
});
}
private static <C> Object getValue(Object obj, String[] src)throws Exception {
for (int i = 0; i < src.length; i++) {
Class<?> clazz = obj.getClass();
String methodName = "get" + src[i].substring(0, 1).toUpperCase()+ src[i].substring(1);
Method method = clazz.getMethod(methodName);
obj = method.invoke(obj);
}
return obj;
}
private static int getSortNum(Object obj1, Object obj2, boolean order)throws Exception {
int sort;
if (obj1 != null && obj2 == null) {
sort = 1;
} else if (obj1 == null && obj2 != null) {
sort = -1;
} else if (obj1 == null && obj2 == null) {
sort = 0;
} else {
Class<?> clazz = obj1.getClass();
Method method = clazz.getMethod("compareTo", obj2.getClass());
sort = (Integer) method.invoke(obj1, obj2);
}
return order ? sort : -sort;
}
}
小白第一次写请多多指教