Optional.ofNullable和StringUtils.isNotEmpty有什么区别
时间: 2023-10-17 09:23:00 浏览: 247
Optional.ofNullable和StringUtils.isNotEmpty是两个不同的方法,其作用也不同。
Optional.ofNullable是Java 8中引入的用于避免空指针异常的工具类,它可以将一个可能为null的对象封装成一个Optional对象,从而可以更加优雅地处理null值。例如:
```
String str = null;
Optional<String> opt = Optional.ofNullable(str);
System.out.println(opt.isPresent()); // false
```
StringUtils.isNotEmpty是Apache Commons Lang工具类库中的一个方法,用于判断一个字符串是否不为空或null。例如:
```
String str = "";
if (StringUtils.isNotEmpty(str)) {
// do something
}
```
因此,两者的区别在于作用不同,Optional.ofNullable用于处理null值,而StringUtils.isNotEmpty用于判断字符串是否不为空或null。
相关问题
@Override public IPage<ReportPrintVO> reportPrintingPage(IPage<ReportPrintVO> page, QueryWrapper<ReportPrintVO> wrapper) { List<ReportPrintVO> reportPrintVOS = baseMapper.reportPrintingPage(page, wrapper); Map<String, String> testTypeMap = BusDictBizCache.getValueMap(BusDictConstant.INSPECTION_TYPE); if (CollectionUtils.isNotEmpty(reportPrintVOS)) { for (ReportPrintVO reportPrint : reportPrintVOS) { LocalDate wranDate = LocalDate.now(); Integer expireDay = Optional.ofNullable(BasParamCache.getValue(BusParamConstant.INSTRUMENT_EXPIRE_DAY)) .map(v -> StringUtils.isEmpty(v) ? 1 : Integer.parseInt(v)).orElse(1); wranDate = wranDate.plusDays(expireDay); BusSampleReportPageVO busSampleReportPageVO = new BusSampleReportPageVO(); busSampleReportPageVO.setPlanCompleteDate(reportPrint.getPlanCompleteDate()); setWarnType(busSampleReportPageVO, wranDate); reportPrint.setWarnType(busSampleReportPageVO.getWarnType()); reportPrint.setQrcodeUrl(BusTemplateUtil.getQrCodeContent(reportPrint.getReportId())); // 检校类型 reportPrint.setInspectionTypeName(testTypeMap.get(reportPrint.getInspectionType())); } } return page.setRecords(reportPrintVOS); }我要在这段代码中加上查询条件 根据bs.report_no 从小到大进行排序
要在这段代码中添加根据 "bs.report_no" 字段从小到大进行排序的查询条件,可以使用 QueryWrapper 类的 orderByAsc 方法。请将以下代码添加到你的方法中:
```java
wrapper.orderByAsc("bs.report_no");
```
确保在调用 `baseMapper.reportPrintingPage(page, wrapper)` 前设置了排序条件。这样就会按照 "bs.report_no" 字段从小到大进行排序。
for (BdFindOutPlanGroupDTO comDTO : result) { Result<FeignOrgDTO> feignOrgDTOResult = remoteIpmpOrgService.getInfoById(comDTO.getCompanyId().toString()); if (StringUtils.isNotNull(feignOrgDTOResult.getData())) { if (StringUtils.isNotNull(feignOrgDTOResult.getData())) { comDTO.setCompanyName(feignOrgDTOResult.getData().getOrgName()); } else { comDTO.setCompanyName(comDTO.getCompanyId().toString()); } } else { comDTO.setCompanyName(comDTO.getCompanyId().toString()); } BdFindOutPlanGroupDtlQueryDTO findOutPlanGroupDtlQueryDTO = new BdFindOutPlanGroupDtlQueryDTO(); findOutPlanGroupDtlQueryDTO.setFindOutPlanGroupId(Long.parseLong(comDTO.getFindOutPlanGroupId())); List<BdFindOutPlanGroupDtlDO> bdFindOutPlanGroupDtlDOS = findOutPlanGroupDtlMapper.selectList(findOutPlanGroupDtlQueryDTO); List<BdFindOutPlanGroupDtlDTO> dtoList = BeanUtils.copyToList(bdFindOutPlanGroupDtlDOS, BdFindOutPlanGroupDtlDTO.class); //获取项目id与项目名称对应关系 if (StringUtils.isNotEmpty(dtoList)) { List<Long> projectIdList = dtoList.stream().map(BdFindOutPlanGroupDtlDTO::getProjectId).collect(Collectors.toList()); ApiMdProjectDTO apiMdProjectDTO = new ApiMdProjectDTO(); apiMdProjectDTO.setProjectIds(projectIdList.stream().map(x -> x + "").collect(Collectors.toList())); Result<List<ApiMdProjectDTO>> projectInfoList = remoteProjecctService.listProject(apiMdProjectDTO); Map<String, String> stringStringMap = CollectionUtils.toMap( projectInfoList.getData(), ApiMdProjectDTO::getProjectId, ApiMdProjectDTO::getProjectName ); //将从其他表获取的数值做填充 dtoList.forEach(d -> { //如果md_project表未查询到名称,则显示id d.setProjectName(Optional.ofNullable(stringStringMap.get(d.getProjectId().toString())).orElse(d.getProjectId().toString())); }); } comDTO.setFindOutPlanGroupDtlDTOS(dtoList); } 代码优化
以下是对代码的优化建议:
1. 建议将远程调用服务的代码封装到一个方法中,使得代码更加简洁和易于维护。
2. 在进行远程调用之前,可以先判断需要的参数是否为空,以避免不必要的远程调用。
3. 在获取数据后,可以使用Java 8的流式编程和Lambda表达式来简化代码,例如使用stream()、map()、collect()等方法。
4. 建议使用Java 8的Optional类来避免空指针异常的出现,使代码更加健壮。
综上所述,代码可以进行如下优化:
```
for (BdFindOutPlanGroupDTO comDTO : result) {
// 获取公司名称
String companyName = comDTO.getCompanyId().toString();
Result<FeignOrgDTO> feignOrgDTOResult = getOrgInfoById(comDTO.getCompanyId().toString());
if (feignOrgDTOResult.isSuccess() && StringUtils.isNotNull(feignOrgDTOResult.getData())) {
companyName = feignOrgDTOResult.getData().getOrgName();
}
comDTO.setCompanyName(companyName);
// 获取项目信息
BdFindOutPlanGroupDtlQueryDTO findOutPlanGroupDtlQueryDTO = new BdFindOutPlanGroupDtlQueryDTO();
findOutPlanGroupDtlQueryDTO.setFindOutPlanGroupId(Long.parseLong(comDTO.getFindOutPlanGroupId()));
List<BdFindOutPlanGroupDtlDO> bdFindOutPlanGroupDtlDOS = findOutPlanGroupDtlMapper.selectList(findOutPlanGroupDtlQueryDTO);
List<BdFindOutPlanGroupDtlDTO> dtoList = BeanUtils.copyToList(bdFindOutPlanGroupDtlDOS, BdFindOutPlanGroupDtlDTO.class);
if (StringUtils.isNotEmpty(dtoList)) {
// 获取项目id与项目名称对应关系
List<Long> projectIdList = dtoList.stream().map(BdFindOutPlanGroupDtlDTO::getProjectId).collect(Collectors.toList());
Result<List<ApiMdProjectDTO>> projectInfoList = getProjectInfoList(projectIdList);
if (projectInfoList.isSuccess()) {
Map<String, String> stringStringMap = projectInfoList.getData().stream().collect(Collectors.toMap(ApiMdProjectDTO::getProjectId, ApiMdProjectDTO::getProjectName));
// 填充数据
dtoList.forEach(d -> {
d.setProjectName(Optional.ofNullable(stringStringMap.get(d.getProjectId().toString())).orElse(d.getProjectId().toString()));
});
}
}
comDTO.setFindOutPlanGroupDtlDTOS(dtoList);
}
// 获取组织信息
private Result<FeignOrgDTO> getOrgInfoById(String companyId) {
if (StringUtils.isEmpty(companyId)) {
return Result.fail("公司ID不能为空");
}
return remoteIpmpOrgService.getInfoById(companyId);
}
// 获取项目信息列表
private Result<List<ApiMdProjectDTO>> getProjectInfoList(List<Long> projectIdList) {
if (CollectionUtils.isEmpty(projectIdList)) {
return Result.fail("项目ID列表不能为空");
}
ApiMdProjectDTO apiMdProjectDTO = new ApiMdProjectDTO();
apiMdProjectDTO.setProjectIds(projectIdList.stream().map(x -> x + "").collect(Collectors.toList()));
return remoteProjecctService.listProject(apiMdProjectDTO);
}
```
阅读全文