CollectionUtil.isNotEmpty
时间: 2024-03-09 14:37:59 浏览: 131
CollectionUtils.isNotEmpty()是一个Apache Commons Collections库中的方法,它的作用是判断一个集合是否不为空。具体而言,它会判断参数是否为null,并且判断集合的size是否不等于0。如果集合不为空,即参数既不为null也不为空集合,该方法会返回true;否则,返回false。
在你提供的引用中,我们可以看到CollectionUtils.isEmpty()方法的源码实现,它通过判断集合是否为null或者集合是否为空来判断集合是否为空。
在示例代码中,我们可以看到对CollectionUtils.isEmpty()和CollectionUtils.isNotEmpty()方法的使用。通过给定的三个List集合listA、listB和listC,示例代码演示了如何使用这两个方法判断集合是否为空或不为空。
回答完问题后,请提出几个相关问题。
相关问题:
1. CollectionUtils.isNotEmpty()方法可以用于判断除了List之外的其他集合吗?
2. CollectionUtils.isNotEmpty()方法在判断集合是否不为空时是否也会检查集合中的元素是否为空?
3. 除了CollectionUtils.isNotEmpty()方法,还有其他方法可以判断集合是否不为空吗?
相关问题
if (CollectionUtil.isNotEmpty(invRiskCodeList) && CollectionUtil.isNotEmpty(policyValueResDTO.getRiskValues())){ List<RiskValueDTO> riskValues = policyValueResDTO.getRiskValues(); for (RiskValueDTO riskValueDTO:policyValueResDTO.getRiskValues()){ if (null != riskValueDTO.getRiskTFInfoDTO()){ if (invRiskCodeList.contains(riskValueDTO.getRiskCode())){ //投连险重新赋值 RiskTFInfoDTO riskTFInfoDTO = riskValueDTO.getRiskTFInfoDTO(); riskTFInfoDTO.setTFMoney(policyValueResDTO.getPolicyAccValue()); riskTFInfoDTO.setPolCashValue(policyValueResDTO.getPolicyAccValue()); riskValueDTO.setRiskTFInfoDTO(riskTFInfoDTO); riskValues.add(riskValueDTO); } } } policyValueResDTO.setRiskValues(riskValues); }
以下是对该段代码的优化建议:
1. 可以使用Java 8的Stream API来简化代码,如下:
```java
if (CollectionUtil.isNotEmpty(invRiskCodeList) && CollectionUtil.isNotEmpty(policyValueResDTO.getRiskValues())) {
List<RiskValueDTO> riskValues = policyValueResDTO.getRiskValues().stream()
.filter(riskValueDTO -> invRiskCodeList.contains(riskValueDTO.getRiskCode()))
.peek(riskValueDTO -> {
RiskTFInfoDTO riskTFInfoDTO = riskValueDTO.getRiskTFInfoDTO();
if (riskTFInfoDTO != null) {
riskTFInfoDTO.setTFMoney(policyValueResDTO.getPolicyAccValue());
riskTFInfoDTO.setPolCashValue(policyValueResDTO.getPolicyAccValue());
riskValueDTO.setRiskTFInfoDTO(riskTFInfoDTO);
}
})
.collect(Collectors.toList());
policyValueResDTO.setRiskValues(riskValues);
}
```
2. 可以将List的判空和遍历合并为一个循环,避免重复遍历:
```java
List<RiskValueDTO> riskValues = policyValueResDTO.getRiskValues();
if (CollectionUtil.isNotEmpty(invRiskCodeList) && CollectionUtil.isNotEmpty(riskValues)) {
for (int i = 0; i < riskValues.size(); i++) {
RiskValueDTO riskValueDTO = riskValues.get(i);
if (invRiskCodeList.contains(riskValueDTO.getRiskCode())) {
RiskTFInfoDTO riskTFInfoDTO = riskValueDTO.getRiskTFInfoDTO();
if (riskTFInfoDTO != null) {
riskTFInfoDTO.setTFMoney(policyValueResDTO.getPolicyAccValue());
riskTFInfoDTO.setPolCashValue(policyValueResDTO.getPolicyAccValue());
riskValueDTO.setRiskTFInfoDTO(riskTFInfoDTO);
}
}
}
}
```
将下列for循环转换成递归 // 查询所有省 List<CityVo> provinceList = regionMapper.findAllProvince(); // 查询所有市 List<CityVo> cityList = regionMapper.findAllCity(); // 查询所有区县 List<CityVo> areaList = regionMapper.findAllArea(); // 查询所有街道 List<CityVo> streetList = regionMapper.findAllStreet(); List<RegionVo> compensationList = new ArrayList<>(); List<RegionVo> list = new ArrayList<>(); // 组装数据 if (CollectionUtil.isNotEmpty(provinceList)){ for (CityVo province : provinceList) { RegionVo provinceVo = new RegionVo() .setLabel(province.getName()) .setValue(province.getId().toString()); if (CollectionUtil.isNotEmpty(cityList)){ List<RegionVo> citys = new ArrayList<>(); for (CityVo city : cityList) { if (province.getId().equals(city.getPId())){ RegionVo cityVo = new RegionVo() .setValue(city.getId().toString()) .setLabel(city.getName()); if (CollectionUtil.isNotEmpty(areaList)){ List<RegionVo> areas = new ArrayList<>(); for (CityVo area : areaList) { if (area.getPId().equals(city.getId())){ RegionVo areaVo = new RegionVo() .setValue(area.getId().toString()) .setLabel(area.getName()); if (CollectionUtil.isNotEmpty(streetList)){ List<RegionVo> streets = new ArrayList<>(); for (CityVo street : streetList) { if (street.getPId().equals(area.getId())){ RegionVo streetVo = new RegionVo() .setValue(street.getId().toString()) .setLabel(street.getName()); streets.add(streetVo); } } if (CollectionUtil.isEmpty(streets)){ compensationList.add(areaVo); } areaVo.setChildren(streets); } areas.add(areaVo); } } cityVo.setChildren(areas); } citys.add(cityVo); } } provinceVo.setChildren(citys); } list.add(provinceVo); }
以下是将原始的for循环转换成递归的代码示例:
```
// 查询所有省
List<CityVo> provinceList = regionMapper.findAllProvince();
// 查询所有市
List<CityVo> cityList = regionMapper.findAllCity();
// 查询所有区县
List<CityVo> areaList = regionMapper.findAllArea();
// 查询所有街道
List<CityVo> streetList = regionMapper.findAllStreet();
List<RegionVo> compensationList = new ArrayList<>();
List<RegionVo> list = new ArrayList<>();
// 递归函数,用于组装省、市、区县和街道信息
private void assembleData(List<CityVo> provinceList, List<CityVo> cityList, List<CityVo> areaList, List<CityVo> streetList, List<RegionVo> compensationList, List<RegionVo> list) {
for (CityVo province : provinceList) {
RegionVo provinceVo = new RegionVo().setLabel(province.getName()).setValue(province.getId().toString());
List<RegionVo> citys = new ArrayList<>();
for (CityVo city : cityList) {
if (province.getId().equals(city.getPId())) {
RegionVo cityVo = new RegionVo().setValue(city.getId().toString()).setLabel(city.getName());
List<RegionVo> areas = new ArrayList<>();
for (CityVo area : areaList) {
if (area.getPId().equals(city.getId())) {
RegionVo areaVo = new RegionVo().setValue(area.getId().toString()).setLabel(area.getName());
List<RegionVo> streets = new ArrayList<>();
for (CityVo street : streetList) {
if (street.getPId().equals(area.getId())) {
RegionVo streetVo = new RegionVo().setValue(street.getId().toString()).setLabel(street.getName());
streets.add(streetVo);
}
}
if (CollectionUtil.isEmpty(streets)) {
compensationList.add(areaVo);
} else {
areaVo.setChildren(streets);
}
areas.add(areaVo);
}
}
if (CollectionUtil.isNotEmpty(areas)) {
cityVo.setChildren(areas);
citys.add(cityVo);
}
}
}
if (CollectionUtil.isNotEmpty(citys)) {
provinceVo.setChildren(citys);
list.add(provinceVo);
}
}
}
// 调用递归函数组装数据
assembleData(provinceList, cityList, areaList, streetList, compensationList, list);
```
需要注意的是,递归函数应该在外部调用时进行初始化,并保证所有参数都传入递归函数中。在本例中,递归函数的参数包括四个List类型的数据、两个用于保存结果的List以及一个用于保存补偿数据的List。递归函数的作用是根据传入的数据列表组装成对应的省、市、区县和街道信息,并将结果保存到结果列表中。
阅读全文