Java 代码优化:计算结果排名并分组
以下是代码优化后的版本:
public static Map<String, Map<String, ComputeResultExportDTO>> getTotalRankingMap(final List<ComputeResultExportDTO> computeResultExports) {
return computeResultExports.stream()
.filter(DistinctKeyUtil.distinctByKey(ComputeResultExportDTO::getEmpCode))
.collect(Collectors.groupingBy(ComputeResultExportDTO::getIdentity,
LinkedHashMap::new,
Collectors.collectingAndThen(Collectors.toList(), item -> {
final AtomicInteger atomicInteger = new AtomicInteger();
return item.stream()
.sorted(Comparator.comparing(ComputeResultExportDTO::getTotalScore).reversed())
.peek(map -> map.setNum(atomicInteger.incrementAndGet()))
.collect(Collectors.toList());
})))
.entrySet()
.stream()
.collect(Collectors.toMap(Map.Entry::getKey,
item -> item.getValue().stream()
.collect(Collectors.toMap(ComputeResultExportDTO::getEmpName,
Function.identity(),
(o, n) -> o)),
(o, n) -> o,
LinkedHashMap::new));
}
该代码使用了 Java Stream API,通过 filter、groupingBy、collectingAndThen、sorted、peek、toMap 等操作,对 computeResultExports 列表进行筛选、分组、排序、排名等操作。
优化点:
- 使用 Stream API 替代传统的循环,代码更加简洁易读。
- 使用
DistinctKeyUtil.distinctByKey对员工代码进行去重,提高效率。 - 使用
Collectors.collectingAndThen对每个分组进行排序,并将排序后的结果收集到一个新的列表中。 - 使用
Comparator.comparing(ComputeResultExportDTO::getTotalScore).reversed()对每个分组进行降序排序。 - 使用
peek操作对排序后的每个元素进行排名,并更新其num属性。 - 使用
LinkedHashMap保持分组和排名结果的顺序。
优点:
- 代码更加简洁易读。
- 提高了代码执行效率。
- 更加符合 Java Stream API 的编程风格。
其他建议:
- 可以考虑使用 Java 8 中的 Optional 类,避免空指针异常。
- 可以根据实际情况选择合适的集合类型,例如使用 HashMap 或 TreeMap。
- 可以使用 JUnit 或其他测试框架进行测试,确保代码的正确性。
原文地址: https://www.cveoy.top/t/topic/ovty 著作权归作者所有。请勿转载和采集!