Java 代码优化:使用高阶函数消除重复代码 (Lambda 表达式)
可以使用高阶函数来消除重复代码。首先,定义一个通用的方法来获取被考核者信息:
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方法,可以消除重复代码。
原文地址: https://www.cveoy.top/t/topic/qDFv 著作权归作者所有。请勿转载和采集!