MapBean

 /** 判断map里的键名是否等于实体内的某个属性名*/
    public static boolean isEquals(String key, Field[] userFields) {
        for (int i = 0; i < userFields.length; i++) {
            if (key.equals(userFields[i].getName())) {
                return true;
            }
        }
        return false;
    }

    public  static  Object converMap2Class(Map<String,Object> map,Class<?> clazz)throws Exception{
        /** 1.获取反射的类地址*/
        String name=clazz.getName();

        /** 2.实例化User类对象*/
        //使⽤Class类的中静态forName()⽅法获得与字符串相应的Class对象
        Class<?> class1=Class.forName(name);
        //使用对应类的无参构造方法来创建该类的实例
        Object object=class1.newInstance();

        /** 3.获得类中的所有属性*/
        //获得所有属性(全部类型的修饰符属性均可获得)
        Field[] userFields=class1.getDeclaredFields();

        /** 4.改变属性类型*/
        //将反射对象中的 accessible 标志位设置为 true,就意味着允许客户端拥有超级权限
        for (int i=0;i<userFields.length;i++){
            userFields[i].setAccessible(true);
        }

//      keySet是键的集合,Set里的类型是key的类型
//      entrySet是键值对的集合,Set里的类型是Map.Entry

        /** 通过Map.entrySet遍历循环map集合,如果存在key和User类内属性名相同,则调用setXXX方法,给属性赋值 */
        for (Map.Entry<String, Object> entry : map.entrySet()) {
            //userFields是一个属性(key)集合,entry是map中的一个key-value对
            if (isEquals(entry.getKey(), userFields)) {
                /**调用setXXX方法,给属性赋值 */

                /** 1.把entry中的key值的首字母大写 */
                //xx.substring(0,2)表示取第一个和第二个字符(含头不含尾
                //xx.substring(2)表示去掉前两个字符
                //toUpperCase() 方法用于把字符串转换为大写
                String names = entry.getKey().substring(0, 1).toUpperCase() + entry.getKey().substring(1);

                /** 2.把entry中的value值转成String类型 */
                String value = entry.getValue().toString();

                /** 3.获得class1对象的get××方法
                 * getMethods(): 获得类的public类型的方法
                 * getMethod(String name, Class[] params): 获得类的特定方法,name参数指定方法的名字,params参数指定方法的参数类型
                 * getDeclaredMethods(): 获取类中所有的方法(public、protected、default、private)
                 * getDeclaredMethod(String name, Class[] params): 获得类的特定方法,name参数指定方法的名字,params参数指定方法的参数类型
                 * */
                Method mo = class1.getMethod("get" + names);

                /**类型判断可扩展 */
                //Method.getReturnType()方法返回一个Class对象,该对象表示此Method对象表示的方法的正式返回类型。
                //Method.getName()方法以字符串形式返回此方法的名称。
                if (mo.getReturnType().getName().equals(Integer.class.getName())) {
                    mo = class1.getMethod("set" + names, Integer.class);
                    mo.invoke(object, Integer.valueOf(value));
                } else if (mo.getReturnType().getName().equals(String.class.getName())) {
                    mo = class1.getMethod("set" + names, String.class);
                    mo.invoke(object, value);
                } else if (mo.getReturnType().getName().equals(Long.class.getName())) {
                    mo = class1.getMethod("set" + names, Long.class);
                    mo.invoke(object, Long.valueOf(value));
                } else if (mo.getReturnType().getName().equals(Double.class.getName())) {
                    mo = class1.getMethod("set" + names, Double.class);
                    mo.invoke(object, Double.valueOf(value));
                } else if (mo.getReturnType().getName().equals(Date.class.getName())) {
                    mo = class1.getMethod("set" + names, Date.class);
                    SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH-mm-ss");
                    Date date = new Date(Long.parseLong(value));
                    String time = format.format(date);
                    mo.invoke(object, format.parse(time));
                } else if (mo.getReturnType().getName().equals(Float.class.getName())) {
                    mo = class1.getMethod("set" + names, Float.class);
                    mo.invoke(object, Float.valueOf(value));
                }
            }
        }

        return object;
    }

    public static <T> void setObject(T t, Map map) throws Exception {
        //创建class cl
        Class cl = t.getClass();

        //forEach
        //1 .遍历数组内的元素,操作这个数据,然后返回,会改变原数组
        //2 .不会返回有意义的值,只是能在循环中处理结果
        //3 .forEach()允许callback更改原始数组的元素。map()返回新的数组。
        map.forEach((k,v)->{
            try {
                //key首字母大写
                String name = k.toString().substring(0,1).toUpperCase() + k.toString().substring(1);
                Method mo = cl.getMethod("get"+name);
                //类型判断可扩展
                if(mo.getReturnType().getName().equals(Integer.class.getName())){
                    mo = cl.getMethod("set"+name,Integer.class);
                    mo.invoke(t,v);
                }else if(mo.getReturnType().getName().equals(String.class.getName())){
                    mo = cl.getMethod("set"+name,String.class);
                    mo.invoke(t,v);
                }else if(mo.getReturnType().getName().equals(Long.class.getName())){
                    mo = cl.getMethod("set"+name,Long.class);
                    mo.invoke(t,v);
                }else if(mo.getReturnType().getName().equals(Double.class.getName())){
                    mo = cl.getMethod("set"+name,Double.class);
                    mo.invoke(t,v);
                }else if(mo.getReturnType().getName().equals(Date.class.getName())){
                    mo = cl.getMethod("set"+name, Date.class);
                    mo.invoke(t,v);
                }else if(mo.getReturnType().getName().equals(Float.class.getName())){
                    mo = cl.getMethod("set"+name,Float.class);
                    mo.invoke(t,v);
                }
            } catch (Exception e) {
                System.out.println("当前字段属性:"+k+",不在类中");
                e.printStackTrace();
            }
        });
    }

    public static Map<String, Object> dataMap(String items) {
        //把json对象items转换成hashmap
        HashMap hashMap = JSON.parseObject(items, HashMap.class);

        String time = null;

        Map<String,Object> map =new HashMap<String,Object>();

        //for(类型名 对象 : 需要遍历的数组)
        //先创建了对象或者变量,然后遍历数组,⼀个⼀个赋值给对象
        for(Object key : hashMap.keySet()) {

            //JSON.parseObject(String str)是将str转化为相应的JSONObject对象
            // 其中str是“键值对”形式的json字符串,转化为JSONObject对象之后就可以使⽤其内置的⽅法,进⾏各种处理了。
            //hashmap.get(Object key)返回key对应的value
            JSONObject jsonObject=JSONObject.parseObject(hashMap.get(key).toString());
            //取value值
            String values = jsonObject.get("value").toString();
            time = jsonObject.get("time").toString();
            map.put(key.toString(),values);
        }
        map.put("time",time);
        return map;
    }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值