美文网首页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方法调用参数

相关文章

  • 一些包装数据的工具类

    DataTransformUtil.java 后续还会陆续补充.........更新时间记录: 2018/1/10...

  • JAVA基础---Date类 SimpleDateFormat

    ## 一、包装类 ##01. 包装类概述 >* 什么是包装类? >* 基本数据类型对应的包装类 总结: 1.什么是...

  • Java基础知识(二)基础数据类型

    Number包装类 包装类基本数据类型BooleanbooleanBytebyteShortshortIntege...

  • Java-装箱拆箱

    包装类(Wrapper Class) 八个和基本数据类型对应的类统称为包装类(Wrapper Class) 包装类...

  • Java工具类—包装类

    Java工具类——包装类 我们都知道,JDK 其实给我们提供了很多很多 Java 开发者已经写好的现成的类,他们其...

  • Java数据类型、包装类、数据存储区

    数据类型 包装类 基本数据类型与包装类数据类型包装类内存空间取值范围byteByte8bit=1b-27~27-1...

  • 第47节:Java当中的基本类型包装类

    Java当中的基本类型包装类 01 基本数据类型对象的包装类 什么是基本数据类型对象包装类呢?就是把基本数据类型封...

  • 第三章②包装类

    包装类:八种基本数据类型对应着一个类,此类即为包装类。 基本数据类型、包装类、string之间的相互转换 把基本数...

  • Java 常用类 04. Java 包装类

    包装类 Java 数据类型分为:基本数据类型 和 引用数据类型,但基本数据类型怎么成为对象呢? 包装类:基本数据类...

  • Java包装类

    包装类 装箱:把基本数据类型转换成包装类 拆箱:把包装类转换成基本数据类型 基本数据类型和字符串之间的转换

网友评论

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

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