/**
* 根据属性分组
*
* @param obj
* @param param
* @return
*/
public static <T> Map<Object, List<T>> groupByCollector(List<T> obj, String param) {// 分组
return obj.parallelStream().collect(groupingBy(t -> {
Class<? extends Object> clazz = null;
Method getMethod = null;
PropertyDescriptor pd = null;
try {
clazz = t.getClass();
Field field = clazz.getDeclaredField(param);
pd = new PropertyDescriptor(field.getName(), clazz);
getMethod = pd.getReadMethod();
} catch (NoSuchFieldException | IntrospectionException e) {
e.printStackTrace();
}
try {
return getMethod.invoke(t);
} catch (IllegalAccessException | IllegalArgumentException | InvocationTargetException e) {
e.printStackTrace();
}
return "ERROR";
}));
}
/**
* 根据方法名
*
* @param obj
* @param param
* @return
*/
public static <T> Map<Object, List<T>> groupByCollectorMethod(List<T> obj, String methodName) {// 分组
return obj.parallelStream().collect(groupingBy(t -> {
Class<? extends Object> clazz = null;
Method getMethod = null;
try {
clazz = t.getClass();
getMethod = clazz.getDeclaredMethod(methodName);
} catch (NoSuchMethodException | SecurityException e1) {
e1.printStackTrace();
}
try {
return getMethod.invoke(t);
} catch (IllegalAccessException | IllegalArgumentException | InvocationTargetException e) {
e.printStackTrace();
}
return "ERROR";
}));
}
/**
* 根据Map的key升序排序
*
* @param groupMap
* @return
*/
@SuppressWarnings("hiding")
public static Map<String, List<DocumentDisplayer>> sortByKey(Map<Object, List<DocumentDisplayer>> groupMap) {
Map<String, List<DocumentDisplayer>> result = new TreeMap<String, List<DocumentDisplayer>>(
new Comparator<String>() {
public int compare(String obj1, String obj2) {
// 降序排序
return -(obj2.compareTo(obj1));
}
});
groupMap.forEach((key,value)->{
result.put((String)key, value);
});
return result;
}