美文网首页
Java中实现行转列

Java中实现行转列

作者: o0也无风雨也无晴0o | 来源:发表于2019-01-21 10:20 被阅读0次

    最近在做一个项目,表头数量不确定,动态的增加或者减少。考虑到在数据库做行转列可能性能有点差,就转到Java中转换。

    数据库中展示如下

    image
    后台代码实现
    public <T>List convert(Class<T> clazz,List<T> list){
            List<List> result;
            Field[] fields = clazz.getDeclaredFields();
            result = new ArrayList<>(fields.length);
            for (int i = 0; i < fields.length; i++) {
                result.add(new ArrayList());
            }
            for (T t : list) {
                for (int i = 0; i < fields.length; i++) {
                    List l = result.get(i);
                    Field field = fields[i];
                    field.setAccessible(true);
                    try {
                        l.add(field.get(t));
                    } catch (IllegalAccessException e) {
                        e.printStackTrace();
                    }
                }
            }
            return result;
        }
    

    这是测试的实体类

    public class UserInfo {
    
        private int userId;
        private String password;
        private String usernname;
        private String truename;
        private Date registdate;
        
        //ignore getter and setter
    }
    

    请注意测试实体类的顺序,因为这个会影响最后输出时的顺序

     /**
         * 通过反射,将获取到的值,进行行转列
         * @return
         */
        @GetMapping("convert")
        public List convert(){
            List<UserInfo> userInfoList = userInfoMapper.selectAll();
            return convert(UserInfo.class,userInfoList);
        }
    

    最后,在前段展示的数据

    [
        [1, 2, 3],
        [null, null, null],
        ["张三", "李四", "Tom"],
        ["狗剩", "王八蛋", "Jue"],
        ["2019-01-18T06:00:00.000+0000", "2019-01-18T06:00:00.000+0000", "2019-01-17T06:00:00.000+0000"]
    ]
    

    这个顺序是与实体类中的顺序是一致的。转换成功!

    相关文章

      网友评论

          本文标题:Java中实现行转列

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