通过list里对象的某个方法返回值,对list进行分组。
/**
* 按list对象的某个方法返回值分组
*
* @param list 待分组的list集合
* @param methodName 对象方法名称
* @param methodArgs 对象方法的参数
* @param <T> 对象
* @param <MapKey> 分组key的数据类型
* @return Map 分组的map
* @throws NoSuchMethodException
* @throws InvocationTargetException
* @throws IllegalAccessException
*/
@SuppressWarnings("unchecked")
public static <T, MapKey> Map<MapKey, List<T>> groupByKey(List<T> list, String methodName, Object... methodArgs) throws NoSuchMethodException, InvocationTargetException, IllegalAccessException {
Map<MapKey, List<T>> map = new HashMap<>();
if (list != null) {
for (T t : list) {
Class<?> clz = t.getClass();
Class[] argsClass = new Class[methodArgs.length];
for (int i = 0; i < methodArgs.length; i++) {
argsClass[i] = methodArgs[i].getClass();
}
Method mth = clz.getMethod(methodName, argsClass);
MapKey key = (MapKey) mth.invoke(t, methodArgs);
if (map.containsKey(key)) {
map.get(key).add(t);
} else {
List<T> tempList = new ArrayList<>();
tempList.add(t);
map.put(key, tempList);
}
}
}
return map;
}
就是不写注释,略略略略略略略。。。