目录
一、描述
1、原始结构
2、行转列后的结构
3、需求
需要将第一张表中的数据以第二种表的形式呈现出来,即customerName和customerCode都相同的放在同一行中,且将name列对应的行数据以列的形式呈现。
二、Java代码实现行转列
public List<Map> rowToColumn(){
//存放数据库中获得的原始数据(表一中的数据)
List<Map> primaryData = new ArrayList<>();
//存放行转列之后的数据(表二中的数据)
List<Map> result = new ArrayList<>();
//存放临时的数据对象
Map<String,Object> lmap = new HashMap<>();
//存放最终的数据对象
Map<String,Object> valueMap = new HashMap<>();
//循环原始的数据,将相同的customerName和customerCode放在同一个map对象中
for(int i = 0;i<primaryData.size();i++){
String customerName = primaryData.get(i).get("customerName").toString();
String customerCode = primaryData.get(i).get("customerCode").toString();
String date = primaryData.get(i).get("name").toString();
String rate = primaryData.get(i).get("value").toString();
//若临时map中不包含这一客户名称和编号,则创建新的valueMap来存放结果对象
if(!lmap.containsKey(customerCode+customerName)){
valueMap = new HashMap<>();
valueMap.put("customerName",customerName);
valueMap.put("customerCode",customerCode);
valueMap.put(date,rate);
//将新建的map对象放入临时lmap对象中,用于下一次的判断
lmap.put(customerCode+customerName,valueMap);
result.add(valueMap);
}else {
//若临时map中包含这一客户名称和编号,则在已有的基础上将日期与准交率添加进去
valueMap = (Map<String, Object>) lmap.get(customerCode+customerName);
valueMap.put(date,rate);
}
}
return result;
}