JAVA将Id相同数据中重复列转化成一条

来源:互联网 发布:带mp3 解码 单片机 编辑:程序博客网 时间:2024/06/05 20:17

在数据库中查询数据为以下表格,想转换为json

id:20170719,name:李四,code:“1001”,“1002”,“1003”

所以需要将code合并


id name code 20170719 李四 1001 20170719 李四 1002 20170719 李四 1003 20170718 王五 1001 20170718 王五 1002 20170718 王五 1003

思路如下

已知code固定为1001,1002,1003 将这些code存到itemList里
定义这个数据库查出来的数据为totalList
建立一个这种数据的VO 属性为 id,name,code
建立一个返回类型VO2 属性为id,name,status

开始先将totalList去重 得到 lessList数据如下

id name code 20170719 李四 1001 20170718 王五 1003

在这个小的list里循环,将VO的id,name赋值
同样在这个循环里建立一个双重循环,lessList和itemList
itemList的循环里赋值code给VO 这样就得到了一个VO对象
使用list的contains方法来判断totalList存在这个VO对象则将这个code并给予标识,如果没有给予另一个标识
即通过自己建立的一个对象来在总的数据里查找是否存在

代码块

大致代码如下:

for(VO vo :lessList){            // 筛查编号            vo.setId();            vo2.setId();            // 获取姓名            vo.setName();            vo2.setId();                        // 存放状态            Map<String, Object> status = new HashMap<String, Object>();            for(int i = 0; i<lessList.size(); i++){                for(int j =0; j<itemList.size();j++){                    vo.setCode(itemList.get(j));                    if(totalList.contains(masterTemplateVO)){                        // 1为做过项目                        status.put(itemList.get(j),1);                    }else{                        // 0未做过项目                        status.put(itemList.get(j),0);                    }                }            }            vo2.setStatus(JsonUtils.toJson(status));            voList.add(vo2);        }

更新 2017-7-20
发现mysql内置函数 GROUP_CONCAT(列)可以直接将重复的放在一行,用逗号拼接。

MYsql内置长度为1024 通过在查询窗口运行以下两行数据将拼接长度设置为最大,需重启mysql

SET GLOBAL group_concat_max_len=-1;

SET SESSION group_concat_max_len=-1;

阅读全文
0 0
原创粉丝点击