package cn.com.ty.lift.ud.utils;

import java.lang.reflect.Method;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

/**
 * @author huangyuan
 * @date 2019-12-02
 * @description 项目工具类
 */
public class ProjectUtils {

    /**
     * 将对象集合转化为attr->List<Obj>的map形式，通过特定属性给对象归类
     *
     * @param objList
     * @param attrName:属性名
     * @param parameterTypes
     * @return Map
     * @throws
     * @author huangy
     * @date 2018年12月19日
     */
    public static Map attrToListMap(List objList, String attrName, Class<?>... parameterTypes) {
        Map map = new HashMap<>();
        try {
            if (objList != null && objList.size() > 0) {
                for (Object o : objList) {
                    Class<?> classObj = o.getClass();
                    //获取属性get方法
                    String methodName = PojoUtils.attrGetMethodName(attrName);
                    Method method = classObj.getMethod(methodName, parameterTypes);
                    Object attr = method.invoke(o, parameterTypes);
                    //在map中获取对象集合
                    List objInfoList = (List) map.get(attr);
                    if (objInfoList == null) {
                        objInfoList = new ArrayList();
                    }
                    objInfoList.add(o);
                    map.put(attr, objInfoList);
                }
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
        return map;
    }
    
    /**
     * 通过集合对象集合获取对象id集合
     *
     * @param objList
     * @param attrName
     * @param parameterTypes
     * @return List<? extends Object>
     * @throws
     * @author huangy
     */
    public static List getAttrList(List objList, String attrName, Class<?>... parameterTypes) {
        List idList = new ArrayList();
        if (objList != null && objList.size() > 0) {
            for (Object o : objList) {
                try {
                    Class<?> classObj = o.getClass();
                    Method method = classObj.getMethod(PojoUtils.attrGetMethodName(attrName), parameterTypes);
                    Object id = method.invoke(o, parameterTypes);
                    idList.add(id);
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        }
        return idList;
    }
}
