以下是代码优化后的版本:

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,通过 filtergroupingBycollectingAndThensortedpeektoMap 等操作,对 computeResultExports 列表进行筛选、分组、排序、排名等操作。

优化点:

  • 使用 Stream API 替代传统的循环,代码更加简洁易读。
  • 使用 DistinctKeyUtil.distinctByKey 对员工代码进行去重,提高效率。
  • 使用 Collectors.collectingAndThen 对每个分组进行排序,并将排序后的结果收集到一个新的列表中。
  • 使用 Comparator.comparing(ComputeResultExportDTO::getTotalScore).reversed() 对每个分组进行降序排序。
  • 使用 peek 操作对排序后的每个元素进行排名,并更新其 num 属性。
  • 使用 LinkedHashMap 保持分组和排名结果的顺序。

优点:

  • 代码更加简洁易读。
  • 提高了代码执行效率。
  • 更加符合 Java Stream API 的编程风格。

其他建议:

  • 可以考虑使用 Java 8 中的 Optional 类,避免空指针异常。
  • 可以根据实际情况选择合适的集合类型,例如使用 HashMap 或 TreeMap。
  • 可以使用 JUnit 或其他测试框架进行测试,确保代码的正确性。
Java 代码优化:计算结果排名并分组

原文地址: https://www.cveoy.top/t/topic/ovty 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录