可以通过定义一个高阶函数来消除重复代码。首先,定义一个函数findExamineBasicAppraisees,它接受一个Function作为参数,表示根据员工组查询基础评价人。然后,可以使用这个函数来替代两个case中的重复代码。代码示例如下:

public List<Appraisee> findExamineBasicAppraisees(AppraiseesConfig appraiseesConfig, long activityId) {
    // 根据 appraiseesConfig 和 activityId 查询基础评价人
    // ...
    List<Appraisee> appraisees = // 查询结果
    return appraisees;
}

public List<Appraisee> findExamineBasicByEmpGroup(String empGroupId, long activityId) {
    // 根据 empGroupId 和 activityId 查询基础评价人
    // ...
    List<Appraisee> appraisees = // 查询结果
    return appraisees;
}

public List<Appraisee> findEvaluationAppraisees(AppraiseesConfig appraiseesConfig, long activityId) {
    // 根据 appraiseesConfig 和 activityId 查询评估评价人
    // ...
    List<Appraisee> appraisees = // 查询结果
    return appraisees;
}

public List<Appraisee> findEvaluationAppraiseesByEmpGroup(String empGroupId, long activityId) {
    // 根据 empGroupId 和 activityId 查询评估评价人
    // ...
    List<Appraisee> appraisees = // 查询结果
    return appraisees;
}

public List<Appraisee> unionAllRelationAppraisees(List<Appraisee> appraisees, Function<String, List<Appraisee>> findAppraiseesByEmpGroup, String empGroupId) {
    List<Appraisee> result = new ArrayList<>(appraisees);
    List<Appraisee> appraiseesByEmpGroup = findAppraiseesByEmpGroup.apply(empGroupId);
    result.addAll(appraiseesByEmpGroup);
    return result;
}

public List<Appraisee> findAppraisees(String examineDataSource, AppraiseesConfig appraiseesConfig, long activityId, String empGroupId) {
    switch (examineDataSource) {
        case BASE_DATA:
            return unionAllRelationAppraisees(findExamineBasicAppraisees(appraiseesConfig, activityId),
                (g) -> findExamineBasicByEmpGroup(g, activityId), empGroupId);
        case EXAMINER_APPRAISEES_DATA:
            return unionAllRelationAppraisees(findEvaluationAppraisees(appraiseesConfig, activityId),
                (g) -> findEvaluationAppraiseesByEmpGroup(g, activityId), empGroupId);
        default:
            break;
    }
    return null;
}

在这个代码中,我们将两个case中的重复代码替换为了一个高阶函数unionAllRelationAppraisees。该函数接受一个List<Appraisee>和一个Function<String, List<Appraisee>>作为参数,将两个列表合并并返回。在findAppraisees函数中,我们根据examineDataSource的值调用不同的函数来获取评价人列表,并将结果传递给unionAllRelationAppraisees函数进行合并。这样就避免了重复的代码。

Java 代码优化:使用高阶函数消除重复代码 (lambda)

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

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