你可以帮我优化下 下面的代码吗?private List<Map<String, Object>> getResult(Task task, String date, List<TaskRuleDetail> taskRuleDetails) { //存放行转列之后的数据 List<Map<String, Object>> result = new ArrayList<>(); //存放临时的数据对象 Map<String, Map<String, Object>> lamp = new HashMap<>(taskRuleDetails.size()); //存放最终的数据对象 Map<String, Object> valueMap; for (TaskRuleDetail primaryDatum : taskRuleDetails) { String taskCode = primaryDatum.getTaskCode(); String dataField = primaryDatum.getDataField(); String rate = primaryDatum.getDataValue(); //若临时map中不包含这一客户名称和编号,则创建新的valueMap来存放结果对象 if (!lamp.containsKey(taskCode)) { valueMap = new HashMap<>(); valueMap.put("taskCode", taskCode); valueMap.put(dataField, rate); //根据任务id 来查询奖励规则表 //查询奖励相关参数 String type = task.getType(); //将新建的map对象放入临时对象中,用于下一次的判断 lamp.put(taskCode, valueMap); result.add(valueMap); } else { //若临时map中包含这一客户名称和编号,则在已有的基础上将日期与准交率添加进去 valueMap = lamp.get(taskCode); valueMap.put(date, rate); } } return result; }
时间: 2023-02-06 12:26:39 浏览: 65
您好,我可以尝试帮您优化这段代码。
首先,我们可以对这段代码进行如下优化:
1. 使用一个 HashMap 来存储临时数据对象,而不是使用 List。这样可以更快地查找数据,同时避免使用 for 循环查找的性能损失。
2. 在存储临时数据对象时,使用 putIfAbsent() 方法,这样可以避免在已有的数据对象中再次添加数据的操作。
3. 使用 Java 8 的 Stream API 来替代 for 循环。这样可以使代码更简洁,更易于阅读和理解。
修改后的代码如下:
```
private List<Map<String, Object>> getResult(Task task, String date, List<TaskRuleDetail> taskRuleDetails) {
// 存储临时的数据对象
Map<String, Map<String, Object>> temp = new HashMap<>(taskRuleDetails.size());
// 使用 Java 8 的 Stream API 来遍历 taskRuleDetails
taskRuleDetails.stream().forEach(primaryDatum -> {
String taskCode = primaryDatum.getTaskCode();
String dataField = primaryDatum.getDataField();
String rate = primaryDatum.getDataValue();
// 使用 putIfAbsent() 方法来存储临时数据对象
temp.putIfAbsent(taskCode, new HashMap<>());
Map<String, Object> valueMap = temp.get(taskCode);
valueMap.put("taskCode", taskCode);
valueMap.put(dataField, rate);
// 根据任务 id 来查询奖励规则表
// 查询奖励相关参数
String type = task.getType();
});
// 将临时数据对象转换为最终的数据对象
return new ArrayList<>(temp.values());