优化以下代码 //存放行转列之后的数据 List<Map<String, Object>> result = new ArrayList<>(); //存放临时的数据对象 Map<String, Map<String, Object>> lamp = new HashMap<>(primaryData.size()); //存放最终的数据对象 Map<String, Object> valueMap; //循环原始的数据,将相同Name/value放在同一个map对象中 StringBuilder user = new StringBuilder(); StringBuilder app = new StringBuilder(); for (TaskRuleDetail primaryDatum : primaryData) { String taskCode = primaryDatum.getTaskCode(); String date = primaryDatum.getDataField(); String rate = primaryDatum.getDataValue(); if (CommonBusinessEnum.RuleDetailDataFieldEnum.USER_IDENTITY.getValue().equals(date)) { if (!user.toString().contains(rate)) { user.append(rate).append(","); } continue; } if (CommonBusinessEnum.RuleDetailDataFieldEnum.APP_CODE.getValue().equals(date)) { if (!app.toString().contains(rate)) { app.append(rate).append(","); } continue; } //若临时map中不包含这一客户名称和编号,则创建新的valueMap来存放结果对象 if (!lamp.containsKey(taskCode)) { valueMap = new HashMap<>(); valueMap.put("taskCode", taskCode); valueMap.put(date, rate); //根据任务id 来查询奖励规则表 //查询奖励相关参数 TaskAward taskAward = taskAwardService.selectTaskAwardByCode(primaryDatum.getTaskCode(), taskGroupCode); if (taskAward != null) { valueMap.put("awardType", taskAward.getAwardType()); valueMap.put("awardName", taskAward.getName()); valueMap.put("awardInfo", taskAward.getInfo()); } //将新建的map对象放入临时对象中,用于下一次的判断 lamp.put(taskCode, valueMap); result.add(valueMap); } else { //若临时map中包含这一客户名称和编号,则在已有的基础上将日期与准交率添加进去 valueMap = lamp.get(taskCode); valueMap.put(date, rate); } } String userIdentity = ""; String appCode = ""; //用户身份 if (user.length() > 0 && app.length() > 0) { userIdentity = user.substring(0, user.length() - 1); //用户平台 appCode = app.substring(0, app.length() - 1); }
时间: 2023-02-06 13:58:25 浏览: 68
这段代码的主要目的是将原始数据(即primaryData列表中的数据)进行行转列并存储在result列表中。
具体做法是:
- 先将数据按照taskCode进行分组,同一taskCode的数据都放在同一个valueMap中。
- 如果valueMap中不包含taskCode这一项,则新建一个valueMap对象并将taskCode加入。
- 将taskCode与date(即数据的日期)、rate(即数据的值)一并加入valueMap中。
- 将valueMap加入到lamp这个临时的map对象中,并将valueMap加入到result列表中。
- 如果valueMap中已经包含taskCode这一项,则直接将date和rate加入到valueMap中。
这段代码中还有一些其他的操作,比如统计用户身份和应用编码,以及通过taskCode查询奖励规则表并将查询结果加入valueMap中。
相关问题
List<Map<String, Object>> toBeInserted = new ArrayList<>(); // 获取当前接口查询结果 List<Map<String, Object>> result = jxMjKhTxService.selectJxMjkhTxData(constantProperties.getJsbh()); // 待插入的数据 // 待更新的数据 List<Map<String, Object>> toBeUpdated = new ArrayList<>(); // 待删除的数据 List<Map<String, Object>> toBeDeleted = new ArrayList<>(); if (lastResult.isEmpty()) { toBeInserted.addAll(result); } else { // 遍历上一次查 can not find local varialbl 如何修改
你需要先声明一个变量 `lastResult` 并将其赋值为上一次查询的结果,然后才能在代码中使用。可以像下面这样修改代码:
```
List<Map<String, Object>> toBeInserted = new ArrayList<>();
// 获取当前接口查询结果
List<Map<String, Object>> result = jxMjKhTxService.selectJxMjkhTxData(constantProperties.getJsbh());
// 上一次查询结果
List<Map<String, Object>> lastResult = ... // 这里需要根据实际情况来获取
// 待更新的数据
List<Map<String, Object>> toBeUpdated = new ArrayList<>();
// 待删除的数据
List<Map<String, Object>> toBeDeleted = new ArrayList<>();
if (lastResult.isEmpty()) {
toBeInserted.addAll(result);
} else {
// 遍历上一次查询结果,判断哪些数据需要插入、更新或删除
for (Map<String, Object> last : lastResult) {
String id = last.get("id").toString();
boolean exist = false;
for (Map<String, Object> cur : result) {
if (id.equals(cur.get("id").toString())) {
exist = true;
if (!last.equals(cur)) {
toBeUpdated.add(cur);
}
break;
}
}
if (!exist) {
toBeDeleted.add(last);
}
}
// 处理新增数据
for (Map<String, Object> cur : result) {
String id = cur.get("id").toString();
boolean exist = false;
for (Map<String, Object> last : lastResult) {
if (id.equals(last.get("id").toString())) {
exist = true;
break;
}
}
if (!exist) {
toBeInserted.add(cur);
}
}
}
// 插入待插入的数据
for (Map<String, Object> insert : toBeInserted) {
// TODO: 插入数据的操作
}
// 更新待更新的数据
for (Map<String, Object> update : toBeUpdated) {
// TODO: 更新数据的操作
}
// 删除待删除的数据
for (Map<String, Object> delete : toBeDeleted) {
// TODO: 删除数据的操作
}
```
请注意,这里只是一个示例代码,具体的实现需要根据实际情况进行调整。
List<map<String,Object>>转Map
将 List<Map<String, Object>> 转换为 Map 的方法是通过遍历 List 中的每个 Map 对象,将每个 Map 中的键值对添加到一个新的 Map 对象中。可以使用以下 Java 代码实现:
```
List<Map<String, Object>> list = new ArrayList<Map<String, Object>>();
// 假设这里已经有数据了
Map<String, Object> result = new HashMap<String, Object>();
for (Map<String, Object> map : list) {
result.putAll(map);
}
```
上述代码中,我们首先定义了一个 List<Map<String, Object>> 类型的变量 list,并向其中添加了一些 Map 数据。然后我们定义了一个空的 HashMap 类型的变量 result,用于存储转换后的结果。接着我们使用 for 循环遍历 list 中的每个 Map 对象,将每个 Map 中的键值对添加到 result 中,最终得到一个转换后的 Map 对象。