代码优化如下:

public static <T extends BaseScoreItemEntity<T>, S extends BaseScoreTable> List<ScoreItemConfigVO<T, S>> getScoreItemConfigs(final List<T> templateScoreItems,
                                                                                                                             final Map<String, S> scoreTableMap,
                                                                                                                             final boolean isTemplate) {
    // 将评分项按照所属表ID进行分组
    final Map<String, List<T>> templateItemTableGroup = templateScoreItems.stream()
            .filter(f -> StringUtils.isNotBlank(f.getTableId()))
            .collect(Collectors.groupingBy(BaseScoreItemEntity::getTableId));

    // 遍历每个评分表,创建评分项配置对象,并将其添加到结果列表中,构建为评分项配置对象
    return templateItemTableGroup.keySet().stream()
            .map(key -> createBaseScoreItemConfigVO(templateItemTableGroup.getOrDefault(key, Collections.emptyList()),
                    convertBaseScoreTableInfo(isTemplate, scoreTableMap.get(key)),
                    Boolean.TRUE))
            .collect(Collectors.toList());
}

/**
 * 转换评分表格.
 *
 * @param isTemplate 是否为模板
 * @param scoreTable 评分表格
 * @param <T>        所有继承BaseScoreTable(评分表格)的子类
 * @return 所有继承BaseScoreTable(评分表格)的子类
 */
public static <T extends BaseScoreTable> T convertBaseScoreTableInfo(final boolean isTemplate,
                                                                     final T scoreTable) {
    // 如果为模板评分表格,则只需要进行数据拷贝,不需要Id属性
    if (isTemplate && scoreTable != null) {
        scoreTable.setId(null);
    }
    return scoreTable;
}

主要的优化点有:

  1. 使用方法引用来替代匿名函数,减少代码量。
  2. 使用getOrDefault方法来处理可能为空的Map值,避免使用MapUtils.getObject方法。
  3. 简化if条件判断,直接使用scoreTable != null来代替Objects.nonNull(scoreTable)
代码优化 public static T extends BaseScoreItemEntityT S extends BaseScoreTable ListScoreItemConfigVOT S getScoreItemConfigsfinal ListT templateScoreItems

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

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