可以使用高阶函数来消除重复代码。首先,定义一个通用的方法来获取被考核者信息:

private List<EvaluationRelationAppraiseeDTO> getAppraiseesInfo(RelationAppraiseeConfigEntity appraiseesConfig,
                                                                ExamineConfigEntity examineConfig,
                                                                Function<String, List<EvaluationRelationAppraiseeDTO>> getAppraiseesByEmpGroup) {
    /*如果为虚拟被考核者的情况下则使用配置的被考核者信息*/
    if (appraiseesConfig.isVirtually()) {
        return Lists.newArrayList(new EvaluationRelationAppraiseeDTO(appraiseesConfig.getEmpName(),
            appraiseesConfig.getEmpCode(), appraiseesConfig.getDeptName(), appraiseesConfig.getIdentity()));
    }

    /*根据不同的数据来源生成考核关系被考核者信息*/
    final ExamineDataSource examineDataSource = examineConfig.getExamineDataSourceEnum();
    final String empGroupId = appraiseesConfig.getGroupId();
    final String activityId = examineConfig.getEvaluationActivityEntity().getId();
    switch (examineDataSource) {
        case BASE_DATA:
            return unionAllRelationAppraisees(findExamineBasicAppraisees(appraiseesConfig, activityId),
                getAppraiseesByEmpGroup, empGroupId);
        case EXAMINER_APPRAISEES_DATA:
            return unionAllRelationAppraisees(findEvaluationAppraisees(appraiseesConfig, activityId),
                getAppraiseesByEmpGroup, empGroupId);
        default:
            break;
    }
    return Collections.EMPTY_LIST;
}

然后,可以将两个方法中重复的部分提取出来,使用 lambda 表达式作为参数传递给getAppraiseesInfo方法:

public List<EvaluationRelationAppraiseeDTO> matchAppraisees(final RelationAppraiseeConfigEntity appraiseesConfig,
                                                            final ExamineConfigEntity examineConfig) {
    Function<String, List<EvaluationRelationAppraiseeDTO>> findExamineBasicByEmpGroup = 
        (g) -> findExamineBasicByEmpGroup(g, examineConfig.getEvaluationActivityEntity().getId());
    Function<String, List<EvaluationRelationAppraiseeDTO>> findEvaluationAppraiseesByEmpGroup = 
        (g) -> findEvaluationAppraiseesByEmpGroup(g, examineConfig.getEvaluationActivityEntity().getId());

    return getAppraiseesInfo(appraiseesConfig, examineConfig, findExamineBasicByEmpGroup.andThen(Collections::unmodifiableList))
        .unionAll(getAppraiseesInfo(appraiseesConfig, examineConfig, findEvaluationAppraiseesByEmpGroup.andThen(Collections::unmodifiableList)));
}

这样,通过将重复的部分提取出来,并使用 lambda 表达式传递给getAppraiseesInfo方法,可以消除重复代码。

Java 代码优化:使用高阶函数消除重复代码 (Lambda 表达式)

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

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