Java 代码优化:使用高阶函数消除重复代码 (lambda)
可以通过定义一个高阶函数来消除重复代码。首先,定义一个函数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函数进行合并。这样就避免了重复的代码。
原文地址: https://www.cveoy.top/t/topic/qDFl 著作权归作者所有。请勿转载和采集!