美文网首页JAVA小菜鸟排坑系列
一些包装数据的工具类

一些包装数据的工具类

作者: 汗菜 | 来源:发表于2018-01-10 10:28 被阅读23次

    DataTransformUtil.java

    利用java反射写的一些包装数据的方法
    
    /**
     * @author ChenJunLin
     * @desciption 处理数据结果集的工具类
     * @create 2018-01-09 10:29
     **/
    public class DataTransformUtil {
    
       /** 默认的用户头像 */
        public static final String DEAULT_ACCOUNT_IMG = "/image/default_avatar.png";
    
        /**
         * @Author: ChenJunLin
         * @Desciption: 设置集合中头像字段的默认值和前缀路径
         *              clss: 集合泛型的类
         *              list: 需要操作的集合
         *              properties: 头像字段
         *              prefixUrl: 前缀路径
         *              defaulUrl: 默认头像路径
         *              baseUrl: 项目根路径
         * @Date: 10:30 2018/1/9
         * @param:
         */
        public static void setImageFromList (Class clss, List list, String properties, String prefixUrl, String defaulUrl, String baseUrl){
    
            try {
    
                if(StringUtils.isEmpty(defaulUrl)){
                    defaulUrl = baseUrl + DEAULT_ACCOUNT_IMG;
                }
    
                Method getImage = getGetterMethod(clss, properties);
                Method setImage = getSetterMethod(clss, properties, String.class);
    
                for (Object t : list){
                    Object image = getImage.invoke(t);
                    if(null ==image || StringUtils.isEmpty(image.toString())){
                        setImage.invoke(t,defaulUrl);
                    }else {
                        String img = image.toString();
                        if(img.startsWith("/")){
                            setImage.invoke(t, prefixUrl+img);
                        }else {
                            setImage.invoke(t, prefixUrl+"/"+img);
                        }
                    }
                }
            }catch (Exception e){
                e.printStackTrace();
            }
        }
    
        /**
         * @Author: ChenJunLin
         * @Desciption: 设置集合中头像字段的默认值和前缀路径  (List<Map>使用)
         *              list: 需要操作的集合
         *              properties: 头像字段
         *              prefixUrl: 前缀路径
         *              defaulUrl: 默认头像路径
         *              baseUrl: 项目根路径
         * @Date: 17:38 2018/1/19
         * @param:
         */
        public static void setImageFromList (List list, String properties, String prefixUrl, String defaulUrl, String baseUrl){
    
            try {
    
                if(StringUtils.isEmpty(defaulUrl)){
                    defaulUrl = baseUrl + DEAULT_ACCOUNT_IMG;
                }
    
                Class mapClass = Map.class;
                Method[] methods = mapClass.getDeclaredMethods();
                Method getImage = mapClass.getDeclaredMethod("get",Object.class);
                Method setImage = mapClass.getDeclaredMethod("put",Object.class,Object.class);
    
                for (Object t : list){
                    Object image = getImage.invoke(t, properties);
                    if(null ==image || StringUtils.isEmpty(image.toString())){
                        setImage.invoke(t,properties,defaulUrl);
                    }else {
                        String img = image.toString();
                        if(img.startsWith("/")){
                            setImage.invoke(t, properties, prefixUrl+img);
                        }else {
                            setImage.invoke(t, properties, prefixUrl+"/"+img);
                        }
                    }
                }
            }catch (Exception e){
                e.printStackTrace();
            }
        }
    
    
        /**
         * @Author: ChenJunLin
         * @Desciption: 将list集合封装为以某字段为key,list集合为value的map
         *              如:list为整个学校每个班的学生分数情况,现在需要以年级为单位返回学生分数情况
         *              clss: 集合泛型的类型
         *              list: 集合
         *              properties: 需要作为key的属性
         * @Date: 9:56 2018/1/10
         * @param:
         */
        public static Map<Object,List> ListToMapList (Class clss, List list, String properties){
    
            try {
    
                Method getMethod = getGetterMethod(clss, properties);
    
                Map<Object, List> r = new LinkedHashMap<>();
    
                for(Object o : list){
    
                    Object key = getMethod.invoke(o);
    
                    if(!r.containsKey(key)){
                        r.put(key,new ArrayList<>());
                    }
    
                    r.get(key).add(o);
                }
    
                return r;
    
            }catch (Exception e){
                e.printStackTrace();
            }
    
            return null;
        }
    
    
        /**
         * @Author: ChenJunLin
         * @Desciption: 从list中分离某一字段的list,并去重
         *              clss: 集合泛型的类型
         *              list: 集合
         *              properties: 需要作为key的属性
         * @Date: 10:01 2018/1/10
         * @param:
         */
        public static List keyListFromList(Class clss, List list, String properties){
    
            Method getterMethod = getGetterMethod(clss, properties);
            Set<Object> set = new HashSet<>();
    
            try {
                for(Object o : list){
                    Object val = getterMethod.invoke(o);
                    set.add(val);
                }
                return new ArrayList(set);
            }catch (Exception e){
    
            }
            return list;
        }
    
    
        /**
         * @Author: ChenJunLin
         * @Desciption: 首字母大写
         * @Date: 9:48 2018/1/10
         * @param:
         */
        public static String captain (String s){
            char[] chars = s.toCharArray();
            chars[0] -= 32;
            s = String.valueOf(chars);
            return s;
        }
    
        /**
         * @Author: ChenJunLin
         * @Desciption: 获取get方法
         * @Date: 10:05 2018/1/10
         * @param:
         */
        public static Method getGetterMethod(Class clss, String properties){
    
            try {
    
                properties = captain(properties);
                String get = "get"+properties;
                Method getMethod = clss.getDeclaredMethod(get);
                return getMethod;
            }catch (Exception e){
                e.printStackTrace();
            }
            return null;
        }
    
    
        /**
         * @Author: ChenJunLin
         * @Desciption: 获取get方法
         * @Date: 10:05 2018/1/10
         * @param:
         */
        public static Method getSetterMethod(Class clss, String properties, Class propertiesType){
    
            try {
    
                properties = captain(properties);
                String set = "set"+properties;
                Method setMethod = clss.getDeclaredMethod(set,propertiesType);
                return setMethod;
            }catch (Exception e){
                e.printStackTrace();
            }
            return null;
        }
    

    后续还会陆续补充.........
    更新时间记录: 2018/1/10
    2018/1/23 添加 setImageFromList 的重载方法 支持List<Map>类型的图片路径设置
    2018/2/1 setImageFromList Map类型方法修改 set方法调用参数

    相关文章

      网友评论

        本文标题:一些包装数据的工具类

        本文链接:https://www.haomeiwen.com/subject/gunnnxtx.html