list<?>转换成 对应的 class

项目中用到的,list转换成bean。因为查询出来的数据用list 泛型接收,要返回 实体对象。所以需要对应转换。

主要用到的技术:反射。

上代码:

public static <T> List<T> toBean(List<?> list, Class<T> clz) {
        int count = 0;
        Field[] fields = clz.getDeclaredFields();
        List<T> lst = new ArrayList();
        String propertyName = "";
        Object obj = null;

        try {
            for(int i = 0; i < list.size(); ++i) {
                obj = clz.newInstance();
                Object[] oo = (Object[])list.get(i);
                Field[] var12 = fields;
                int var11 = fields.length;

                for(int var10 = 0; var10 < var11; ++var10) {
                    Field fd = var12[var10];
                    Type t = fd.getGenericType();
                    String className = t.toString().replace("class", "");
                    Class<?> type = Class.forName(className.trim());
                    propertyName = "set" + change(fd.getName());
                    Method mt = obj.getClass().getMethod(propertyName, new Class[]{type});
                    if(!"java.lang.String".equals(className.trim())) {
                        if("java.lang.Integer".equals(className.trim())) {
                            mt.invoke(obj, new Object[]{Integer.valueOf(Integer.parseInt(oo[count] == null?"-1":oo[count].toString()))});
                        } else if("java.lang.Long".equals(className.trim())) {
                            mt.invoke(obj, new Object[]{Long.valueOf(Long.parseLong(oo[count] == null?"-1":oo[count].toString()))});
                        } else {
                            Clob clobs;
                            if("java.sql.Date".equals(className.trim())) {
                                Date date = (Date)oo[count];
                                if(!"".equals(date) && date != null) {
                                    java.sql.Date sd = new java.sql.Date(date.getTime());
                                    mt.invoke(obj, new Object[]{sd});
                                } else {
                                    clobs = null;
                                    mt.invoke(obj, new Object[]{clobs});
                                }
                            } else if("oracle.sql.CLOB".equals(className.trim())) {
                                if(oo[count] == null) {
                                    mt.invoke(obj, new Object[1]);
                                } else {
                                    SerializableClobProxy sc = (SerializableClobProxy)Proxy.getInvocationHandler(oo[count]);
                                    clobs = sc.getWrappedClob();
                                    CLOB clob = (CLOB)clobs;
                                    mt.invoke(obj, new Object[]{clob});
                                }
                            } else {
                                mt.invoke(obj, new Object[]{oo[count]});
                            }
                        }
                    } else {
                        String s = "" + oo[count];
                        if(s == null || "null".equals(s)) {
                            s = "";
                        }

                        mt.invoke(obj, new Object[]{s});
                    }

                    ++count;
                }

                count = 0;
                lst.add((T)obj);
            }
        } catch (SecurityException var20) {
            logger.error(var20.getMessage());
        } catch (IllegalArgumentException var21) {
            logger.error(var21.getMessage());
        } catch (InstantiationException var22) {
            logger.error(var22.getMessage());
        } catch (IllegalAccessException var23) {
            logger.error(var23.getMessage());
        } catch (ClassNotFoundException var24) {
            var24.printStackTrace();
            logger.error(var24.getMessage());
        } catch (NoSuchMethodException var25) {
            logger.error(var25.getMessage());
        } catch (InvocationTargetException var26) {
            logger.error(var26.getMessage());
        }

        return lst;
    }

 

转载于:https://www.cnblogs.com/caozengling/p/7026164.html

要将List<UserInfo>转换成Map<Long,List<UserInfo>>,可以使用foreach标签来实现。首先,在mapper层的SysUserMapper.java文件中,可以定义一个方法来实现这个转换操作。方法的参数是List<UserInfo> userList,表示要转换的列表。在方法内部,可以使用Java的foreach循环遍历列表,将每个UserInfo对象的id作为键,将对象本身添加到对应的值列表中。最后,将键值对添加到一个Map<Long,List<UserInfo>>对象中,并将其返回。 下面是一种可能的实现方式: ```java public Map<Long, List<UserInfo>> convertListToMap(List<UserInfo> userList) { Map<Long, List<UserInfo>> resultMap = new HashMap<>(); for (UserInfo userInfo : userList) { Long id = userInfo.getId(); if (resultMap.containsKey(id)) { resultMap.get(id).add(userInfo); } else { List<UserInfo> list = new ArrayList<>(); list.add(userInfo); resultMap.put(id, list); } } return resultMap; } ``` 这样,当调用该方法并传入List<UserInfo>对象时,将返回一个Map<Long,List<UserInfo>>对象,其中每个键是UserInfo对象的id,对应的值是具有相同id的UserInfo对象列表。 请注意,以上只是一种可能的实现方式,具体的实现方式可能因具体需求而有所不同。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* *3* [Mybatis/Ibatis框架--动态SQL, foreach标签与List<T>、数组参数案例](https://blog.csdn.net/dear_Alice_moon/article/details/87534656)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值