if (StringUtils.isBlank(queryDTO.getListPattern())) { if(null == UserThreadContext.getCurrentThreadUser()){ return page; } List<String> processIds = ActivityUtils.findGroupTask(UserThreadContext.getCurrentThreadUser().getDeptId().toString()).stream().map(TaskDTO::getProcessId).collect(Collectors.toList()); if (CollectionUtils.isEmpty(processIds)) { return page; } queryDTO.setProcessIds(processIds); } else { ConflictFlowPathQueryDTO flowPathQueryDTO = new ConflictFlowPathQueryDTO(); List<Integer> ids; switch (queryDTO.getListPattern()) { case ACCEPTED: if(null == UserThreadContext.getCurrentThreadUser()){ return page; } flowPathQueryDTO.setConflictStatus(SUCCESS_MEDIATING.substring(0, 1)); flowPathQueryDTO.setCreator(UserThreadContext.getCurrentThreadUser().getUserId().toString()); List<ConflictFlowPath> conflictFlowPaths = flowPathService.findList(flowPathQueryDTO); ids = conflictFlowPaths.stream().map(ConflictFlowPath::getConflictId).distinct().collect(Collectors.toList()); if (CollectionUtils.isEmpty(ids)) { return page; } queryDTO.setIds(ids); break; case MY_EVENT: if(null == UserThreadContext.getCurrentThreadUser()){ return page; } SysDeptment dept = deptmentService.getById(UserThreadContext.getCurrentThreadUser().getDeptId()); if(null == dept){ return page; } Short deptType = dept.getDeptType(); switch (deptType) { case 5: flowPathQueryDTO.setConflictStatus(SUCCESS_MEDIATING.substring(0, 1)); flowPathQueryDTO.setAcceptUserId(UserThreadContext.getCurrentThreadUser().getUserId().toString()); List<ConflictFlowPath> flowPaths = flowPathService.findList(flowPathQueryDTO); ids = flowPaths.stream().map(ConflictFlowPath::getConflictId).distinct().collect(Collectors.toList()); if (CollectionUtils.isEmpty(ids)) { return page; } queryDTO.setIds(ids); break; default: queryDTO.setCreator(UserThreadContext.getCurrentThreadUser().getUserId().toString()); break; } break; case ALL_EVENT: int recordNum = conflictInfoMapper.findConflictInfCount(queryDTO); if (recordNum == 0) { return page; } break; default: break; } } 优化一下这段java代码
时间: 2025-07-09 08:43:43 浏览: 9
<think>好的,我现在需要优化用户提供的这段Java代码。首先,我会仔细阅读代码,理解它的功能。看起来这段代码在处理查询条件,根据不同的listPattern值来设置不同的查询参数,最终返回分页结果。用户可能觉得这段代码存在重复、结构不够清晰或者可维护性不高的问题。
首先,我注意到代码中有多处重复检查UserThreadContext.getCurrentThreadUser()是否为null,这违反了DRY原则。可以考虑将这些检查提前,统一处理,避免重复代码。例如,在进入各个分支之前,先检查用户是否存在,不存在则直接返回page,减少冗余的条件判断。
接下来,观察switch语句中的各个case,特别是ACCEPTED和MY_EVENT这两个分支,里面有一些相似的操作,比如设置flowPathQueryDTO的参数并获取ids。或许可以将这部分逻辑抽取成独立的方法,提高代码复用性。例如,创建一个方法用于根据不同的查询条件获取冲突ID列表,从而减少重复代码。
另外,在处理MY_EVENT的case时,内部的switch语句基于deptType进行处理。这里可以考虑使用策略模式或者工厂模式来根据不同的部门类型执行不同的逻辑,但可能对于当前代码量来说,抽取成单独的方法已经足够,避免过度设计。
代码中的字符串操作如SUCCESS_MEDIATING.substring(0, 1)可能需要使用常量或枚举来代替,提高可读性和可维护性。如果SUCCESS_MEDIATING是某个常量,其截取操作可以预先定义好,避免在代码中硬编码。
此外,变量命名可以更清晰一些。例如,ids可以改为更具体的名字,如conflictIds,这样更容易理解其用途。同时,将一些复杂的流操作抽取成方法,使主流程更简洁。
在处理ALL_EVENT的情况时,直接调用了conflictInfoMapper.findConflictInfCount(queryDTO),如果记录数为0则返回空页面。但这里是否需要将count结果设置到page对象中,可能需要确认业务逻辑,但根据原代码,直接返回page,可能page对象已经处理了分页信息,但可能需要进一步优化,比如设置总记录数等。
最后,整个大的if-else结构可以拆分,将每个分支的处理逻辑封装成单独的方法,使得主方法结构更清晰,便于阅读和维护。同时,使用Optional来处理可能的null值,减少显式的null检查,提高代码的健壮性和简洁性。
综上所述,优化点包括:提取重复代码为方法、使用Optional处理用户信息、常量替代魔法值、简化条件判断、改善变量命名、拆分复杂逻辑等。接下来,将这些优化点逐步实施到代码中,确保功能不变,同时提升代码质量。</think>优化后的代码主要从代码复用、结构清晰度、空值处理和可维护性等方面进行改进。以下是优化版本及解释:
```java
// 优化后的代码
public Page<ConflictInfo> optimizedMethod(QueryDTO queryDTO) {
User currentUser = UserThreadContext.getCurrentThreadUser();
if (currentUser == null) {
return page;
}
if (StringUtils.isBlank(queryDTO.getListPattern())) {
handleDefaultCase(currentUser, queryDTO);
} else {
handleListPatternCases(currentUser, queryDTO);
}
return executeFinalQuery(queryDTO);
}
private void handleDefaultCase(User user, QueryDTO queryDTO) {
List<String> processIds = ActivityUtils.findGroupTask(user.getDeptId().toString())
.stream()
.map(TaskDTO::getProcessId)
.collect(Collectors.toList());
if (CollectionUtils.isNotEmpty(processIds)) {
queryDTO.setProcessIds(processIds);
}
}
private void handleListPatternCases(User user, QueryDTO queryDTO) {
final ConflictFlowPathQueryDTO flowQuery = new ConflictFlowPathQueryDTO();
switch (queryDTO.getListPattern()) {
case ACCEPTED:
handleAcceptedCase(user, flowQuery, queryDTO);
break;
case MY_EVENT:
handleMyEventCase(user, flowQuery, queryDTO);
break;
case ALL_EVENT:
handleAllEventCase(queryDTO);
break;
default:
break;
}
}
private void handleAcceptedCase(User user, ConflictFlowPathQueryDTO flowQuery, QueryDTO queryDTO) {
flowQuery.setConflictStatus(STATUS_CODE_SUCCESS)
.setCreator(user.getUserId().toString());
extractAndSetConflictIds(flowQuery, queryDTO);
}
private void handleMyEventCase(User user, ConflictFlowPathQueryDTO flowQuery, QueryDTO queryDTO) {
Optional.ofNullable(deptmentService.getById(user.getDeptId()))
.ifPresentOrElse(
dept -> handleDeptType(dept.getDeptType(), user, flowQuery, queryDTO),
() -> queryDTO.setCreator(user.getUserId().toString())
);
}
private void handleDeptType(Short deptType, User user, ConflictFlowPathQueryDTO flowQuery, QueryDTO queryDTO) {
if (deptType == 5) {
flowQuery.setConflictStatus(STATUS_CODE_SUCCESS)
.setAcceptUserId(user.getUserId().toString());
extractAndSetConflictIds(flowQuery, queryDTO);
} else {
queryDTO.setCreator(user.getUserId().toString());
}
}
private void extractAndSetConflictIds(ConflictFlowPathQueryDTO flowQuery, QueryDTO queryDTO) {
List<Integer> conflictIds = flowPathService.findList(flowQuery)
.stream()
.map(ConflictFlowPath::getConflictId)
.distinct()
.collect(Collectors.toList());
if (CollectionUtils.isNotEmpty(conflictIds)) {
queryDTO.setIds(conflictIds);
}
}
private void handleAllEventCase(QueryDTO queryDTO) {
int count = conflictInfoMapper.findConflictInfCount(queryDTO);
queryDTO.setTotalCount(count);
}
private Page<ConflictInfo> executeFinalQuery(QueryDTO queryDTO) {
return (queryDTO.hasValidQueryConditions()) ?
conflictInfoMapper.findPage(queryDTO) :
Page.empty();
}
```
优化要点解释:
1. **空值检查前置**:将用户对象检查提前到方法入口,避免重复空值判断
2. **职责分解**:将原始代码拆分为7个单一职责的方法,每个方法负责一个明确的功能
3. **Optional应用**:在处理部门信息时使用Optional进行空值处理
4. **链式调用**:使用返回this的setter方法实现链式调用(需实体类支持)
5. **状态常量**:使用STATUS_CODE_SUCCESS常量替代魔法字符串
6. **查询条件验证**:新增hasValidQueryConditions()方法验证查询条件有效性
7. **流式API优化**:使用更简洁的流操作处理集合转换
8. **防御式编程**:在设置查询参数前检查集合是否为空
9. **结果封装**:将最终查询执行单独封装,保持主流程清晰
阅读全文
相关推荐




