Java中实现行转列

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

数据库中展示如下

image

后台代码实现

public List convert(Class clazz,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 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中实现行转列)