优化下代码。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); lamp.put(taskCode, valueMap); result.add(valueMap); } else { //若临时map中包含这一客户名称和编号,则在已有的基础上将日期与准交率添加进去 valueMap = lamp.get(taskCode); valueMap.put(date, rate); } }
时间: 2023-02-06 19:04:14 浏览: 234
请问您想获得什么样的优化?是希望运行速度更快,还是希望代码更简洁?还是有其他方面的优化?
如果希望提升运行速度,可以考虑以下优化方式:
1. 在开始循环之前,对 `primaryData` 进行排序。这样能够减少在循环中的比较次数。
2. 减少在循环中的字符串拼接操作。例如,将 `user.append(rate).append(",")` 改为 `user.append(rate + ",")`。
3. 将临时 map `lamp` 中的数据预先放入结果 list `result` 中,这样就可以省去每次循环后都将数据放入结果 list 的操作。
如果希望代码更简洁,可以考虑以下优化方式:
1. 将与特定字段相关的逻辑放入同一个代码块中,避免使用多个 `if` 语句做相同的操作。
2. 将代码中的重复部分抽取出来,避免重复书写。
希望以上建议能够帮到您。如果您有其他需求或疑问,欢迎继续提出。
相关问题
优化下列代码。 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; } if (!lamp.containsKey(taskCode)) { valueMap = new HashMap<>(); valueMap.put("taskCode", taskCode); valueMap.put(date, rate); 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()); } lamp.put(taskCode, valueMap); result.add(valueMap); } else { 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); }
这段代码的主要目的是什么?
我来尽量帮助您优化这段代码。
首先,您可以尝试使用 Java 8 的 Stream API 来优化循环。您可以尝试将循环转换为使用 Stream API 的函数式风格。例如,您可以使用 filter() 函数来筛选符合特定条件的元素,使用 map() 函数来转换元素,使用 collect() 函数来将流转换回列表。
其次,您可以尝试将 StringBuilder 的 toString() 方法调用移到 if 语句外面,以避免在每次循环迭代中都调用 toString()。
另外,您可以考虑将 lamp 和 valueMap 的声明移到循环的外部,这样可以减少创建新对象的次数。
最后,您可以考虑使用 Java 的 String 类的 contains() 方法来替代 StringBuilder 的 toString() 方法和 contains() 方法的组合。例如,您可以使用 user.contains(rate) 来代替 user.toString().contains(rate)。
最后,您可以尝试使用 Java 的 StringJoiner 类来优化字符串拼接,这样可以更有效地合并字符串。
希望这些建议能帮助您优化代码。
优化这段代码增加代码的可阅读性和简洁性并给出示例 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 来查询奖励规则表 //查询奖励相关参数 String type = task.getType(); List<TaskAward> taskAward = taskAwardService.selectTaskAwardByCode(primaryDatum.getTaskCode(), taskGroupCode); if(!CollectionUtils.isEmpty(taskAward)){ if(type.equals(CommonBusinessEnum.TaskTypeEnum.YDWZ.getValue())){ List<AwardDetails> objects = taskAward.stream() .map(award -> { AwardDetails awardDetails = new AwardDetails(); awardDetails.setAwardName(award.getName()); awardDetails.setAwardInfo(award.getInfo()); awardDetails.setAwardType(award.getAwardType()); return awardDetails; }) .collect(Collectors.toList()); valueMap.put("awardDetail", objects); }else { StringBuilder sbName = new StringBuilder(); StringBuilder sbInfo = new StringBuilder(); for (TaskAward award : taskAward) { sbName.append(award.getName()).append(","); sbInfo.append(award.getInfo()).append(","); } String awardName = sbName.deleteCharAt(sbName.length() - 1).toString(); String awardInfo = sbInfo.deleteCharAt(sbInfo.length() - 1).toString(); valueMap.put("awardType", taskAward.get(0).getAwardType()); valueMap.put("awardName", awardName); valueMap.put("awardInfo", awardInfo); } } //将新建的map对象放入临时对象中,用于下一次的判断 lamp.put(taskCode, valueMap); result.add(valueMap); } else { //若临时map中包含这一客户名称和编号,则在已有的基础上将日期与准交率添加进去 valueMap = lamp.get(taskCode); valueMap.put(date, rate); } }
下面是优化后的代码示例,在保证功能不变的情况下尽量增加代码的可阅读性和简洁性:
```
List<Map<String, Object>> result = new ArrayList<>();
Map<String, Map<String, Object>> lamp = new HashMap<>();
StringBuilder user = new StringBuilder();
StringBuilder app = new StringBuilder();
for (TaskRuleDetail primaryDatum : primaryData) {
// 获取当前遍历数据的任务编号、数据字段、数据值
String taskCode = primaryDatum.getTaskCode();
String dataField = primaryDatum.getDataField();
String dataValue = primaryDatum.getDataValue();
// 特殊处理 USER_IDENTITY 和 APP_CODE
if (CommonBusinessEnum.RuleDetailDataFieldEnum.USER_IDENTITY.getValue().equals(dataField)) {
if (!user.toString().contains(dataValue)) {
user.append(dataValue).append(",");
}
continue;
}
if (CommonBusinessEnum.RuleDetailDataFieldEnum.APP_CODE.getValue().equals(dataField)) {
if (!app.toString().contains(dataValue)) {
app.append(dataValue).append(",");
}
continue;
}
// 获取当前任务的类型
String type = task.getType();
// 查询当前任务的奖励规则
List<TaskAward> taskAward = taskAwardService.selectTaskAwardByCode(taskCode, taskGroupCode);
// 若临时 map 中不包含这一客户名称和编号,则创建新的 valueMap 来存放结果对象
Map<String, Object> valueMap;
if (!lamp.containsKey(taskCode)) {
valueMap = new HashMap<>();
valueMap.put("taskCode", taskCode);
valueMap.put(dataField, dataValue);
// 处理奖励信息
if (!CollectionUtils.isEmpty(taskAward)) {
if (type.equals(CommonBusinessEnum.TaskTypeEnum.YDWZ.getValue())) {
List<AwardDetails> objects = taskAward.stream()
.map(award -> {
AwardDetails awardDetails = new AwardDetails();
awardDetails.setAwardName(award.getName());
awardDetails.setAwardInfo(aw