今天下午写了一段代码程序,虽然功能简单,但是实现起来还是需要一些逻辑处理,分享下代码:
private void getLuckActivityContainCondition(ZgLuckActivityContainConditionVO newContain, Long activityId) {
newContain.setRegionCodes(Lists.newArrayList());
newContain.setZgLevels(Lists.newArrayList());
newContain.setRegionList(Lists.newArrayList());
// 区域
List<String> regionCodes = luckActiveRegionDao.selectRegionCodeListByActiveId(activityId);
if(CollectionUtils.isNotEmpty(regionCodes)){
newContain.setRegionCodes(regionCodes);
List<RegionVO> allRegionList = new ArrayList<>();
if(regionCodes.size() > 500){
List<List<String>> regionCodeGroupList = CollectionUtil.groupListByQuantity(regionCodes,500);
for (List<String> subRegionList : regionCodeGroupList){
List<RegionVO> regionVOList = regionServiceClient.findRegionCodeList(subRegionList).getDataWithException();
allRegionList.addAll(regionVOList);
}
}
allRegionList.forEach(record -> {
if (record.getCityCode() == null) {
record.setCityCode("");
record.setCity("");
}
if (record.getCountyCode() == null) {
record.setCountyCode("");
record.setCounty("");
}
});
Map<String, String> provinceMap = allRegionList.stream().collect(Collectors.toMap(RegionVO::getProvinceCode, RegionVO::getProvince, (key1, key2) -> key2));
Map<String, String> cityMap = allRegionList.stream().collect(Collectors.toMap(RegionVO::getCityCode, RegionVO::getCity, (key1, key2) -> key2));
Map<String, String> countyMap = allRegionList.stream().collect(Collectors.toMap(RegionVO::getCountyCode, RegionVO::getCounty, (key1, key2) -> key2));
LinkedHashMap<String, LinkedHashMap<String, List<String>>> regionGroupMap = allRegionList.stream().collect(Collectors.groupingBy(RegionVO::getProvinceCode,LinkedHashMap::new,Collectors.groupingBy(RegionVO::getCityCode, LinkedHashMap::new, Collectors.mapping(RegionVO::getCountyCode, Collectors.toList()))));
List<ZgLuckActivityRegionVO> regionGroupList = new ArrayList<>();
ZgLuckActivityRegionVO regionVO;
List<String> countyNamelist;
Set<String> provinceCodeSet = regionGroupMap.keySet();
for (String provinceCode : provinceCodeSet){
String provinceName = provinceMap.get(provinceCode);
LinkedHashMap<String, List<String>> cityGroupMap = regionGroupMap.get(provinceCode);
int cityCount = 0;
Set<String> cityCodeSet = cityGroupMap.keySet();
for (String cityCode : cityCodeSet){
if(StringUtils.isNotEmpty(cityCode)){
regionVO = new ZgLuckActivityRegionVO();
String cityName = cityMap.get(cityCode);
regionVO.setProvinceCode(provinceCode);
regionVO.setProvinceName(provinceName);
regionVO.setCityCode(cityCode);
regionVO.setCityName(cityName);
List<String> countyList = cityGroupMap.get(cityCode).stream().filter(e -> !"".equals(e)).collect(Collectors.toList());
if(CollectionUtils.isNotEmpty(countyList)){
regionVO.setCountyCodes(countyList);
countyNamelist = new ArrayList<>();
for (String countyC : countyList){
countyNamelist.add(countyMap.get(countyC));
}
regionVO.setCountyNameStr(StringUtils.join(countyNamelist,","));
}
cityCount++;
regionGroupList.add(regionVO);
}
}
if(cityCount == 0){
regionVO = new ZgLuckActivityRegionVO();
regionVO.setProvinceCode(provinceCode);
regionVO.setProvinceName(provinceName);
regionGroupList.add(regionVO);
}
}
newContain.setRegionList(regionGroupList);
}
// 等级
List<Integer> zgLevels = luckActiveLevelDao.selectSrLevelListByActiveId(activityId);
if(CollectionUtils.isNotEmpty(zgLevels)){
newContain.setZgLevels(zgLevels);
}
}
这只是其中的一个小方法,看看大家能否找到你需要的内容,或者找找代码哪里还需要优化,可以给作者留言,我们共同探讨交流学习