优化代码 List<String> distinctList = Lists.newArrayList(); List<SimulationTableDto> distinctedColumnList = Lists.newArrayList(); for (SimulationTableDto simulationTableDto : list) { String key = simulationTableDto.getTableName() + PqlConst.VARIANT_DELIMETER + simulationTableDto.getColumn().getTitle(); if (!distinctList.contains(key)) { distinctedColumnList.add(simulationTableDto); distinctList.add(key); } } return distinctedColumnList;
时间: 2024-03-21 19:40:35 浏览: 22
可以使用Java 8的流式编程来简化代码,如下所示:
```
List<SimulationTableDto> distinctedColumnList = list.stream()
.collect(Collectors.groupingBy(
dto -> dto.getTableName() + PqlConst.VARIANT_DELIMETER + dto.getColumn().getTitle()))
.values().stream().map(group -> group.get(0))
.collect(Collectors.toList());
return distinctedColumnList;
```
这里使用 `groupingBy` 方法将列表按照指定条件进行分组,然后通过 `map` 方法取出每组的第一个元素,最后通过 `toList` 方法将结果转换为列表。这样可以大大简化代码并提高效率。
相关问题
优化代码 private List<SimulationTableDto> distinct(List<SimulationTableDto> list) { // 去重 List<String> distinctList = Lists.newArrayList(); List<SimulationTableDto> distinctedColumnList = Lists.newArrayList(); for (SimulationTableDto simulationTableDto : list) { String key = simulationTableDto.getTableName() + PqlConst.VARIANT_DELIMETER + simulationTableDto.getColumn().getTitle(); if (!distinctList.contains(key)) { distinctedColumnList.add(simulationTableDto); distinctList.add(key); } } return distinctedColumnList;
这段代码可以进一步优化,可以将List<String> distinctList改为Set<String> distinctSet,这样可以提高查找key是否存在的效率,因为Set是基于哈希表实现的,查找时间复杂度是O(1),而List查找时间复杂度是O(n)。另外,可以使用Java 8的Stream API来简化代码实现,如下所示:
```
private List<SimulationTableDto> distinct(List<SimulationTableDto> list) {
return list.stream()
.collect(Collectors.toMap(simulationTableDto -> simulationTableDto.getTableName() + PqlConst.VARIANT_DELIMETER + simulationTableDto.getColumn().getTitle(),
Function.identity(),
(dto1, dto2) -> dto1))
.values()
.stream()
.collect(Collectors.toList());
}
```
这样就可以用一行代码实现去重操作了。
优化这段代码List<MultipartFile> files = Lists.newArrayList(file); if(fileService.checkForbidExtension(forbidExtension,files)){ return ResultBody.failed().msg(FORBID_MSG); } String status = ExportCenterConstant.EXPORT_STATUS_1; String[] resultArray; try { resultArray = fdfsService.upload(file); } catch (Exception e){ log.error("导出中心上传文件到服务器失败:{}", e.getMessage(), e); resultArray = new String[2]; status = ExportCenterConstant.EXPORT_STATUS_3; }
这段代码可以进行如下优化:
```java
List<MultipartFile> files = Lists.newArrayList(file);
if (fileService.checkForbidExtension(forbidExtension, files)) {
return ResultBody.failed().msg(FORBID_MSG);
}
String[] resultArray;
String status = ExportCenterConstant.EXPORT_STATUS_1;
try {
resultArray = fdfsService.upload(file);
} catch (Exception e) {
log.error("导出中心上传文件到服务器失败:{}", e.getMessage(), e);
resultArray = new String[2];
status = ExportCenterConstant.EXPORT_STATUS_3;
}
// 可以将逻辑处理和返回结果分离出来,提高代码可读性
if (status.equals(ExportCenterConstant.EXPORT_STATUS_1)) {
return ResultBody.success().data(resultArray);
} else {
return ResultBody.failed().msg(ERROR_MSG);
}
```
优化点:
1. 将 `List<MultipartFile> files = Lists.newArrayList(file);` 改为直接创建集合对象 `List<MultipartFile> files = new ArrayList<>();`,这样可以避免创建不必要的集合对象。
2. 将逻辑处理和返回结果分离出来,可以提高代码的可读性,使代码更加清晰。