按list对象的某个方法返回值分组

来源:互联网 发布:web软件开发方式 编辑:程序博客网 时间:2024/05/17 01:01

通过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;    }

就是不写注释,略略略略略略略。。。


阅读全文
0 0