數據庫的數據結構
code |
name |
parentCode |
001 |
廣東省 |
|
002 |
湖南省 |
|
00101 |
廣州市 |
001 |
00102 |
佛山市 |
001 |
0010101 |
天河區 |
00101 |
0010102 |
白雲區 |
00101 |
數據結構映射類
public class ProvinceCityDistrict {
private String code;
private String name;
private String parentCode;
}
返回前端的數據結構
public class ProvinceCityDistrictVO {
private String code;
private String value;
private String label;
private List<ProvinceCityDistrictVO> children;
}
查詢數據庫全部數據並封裝成上下級結構
private List<ProvinceCityDistrictVO> findAll() {
List<ProvinceCityDistrict> list = database.findAll();
// 省份數據:第一層級數據
List<ProvinceCityDistrict> parentList = list.stream().filter(entity -> {
return StringUtils.isEmpty(entity.getParentCode());
}).collect(Collectors.toList());
List<ProvinceCityDistrictVO> voList = new ArrayList<>(parentList.size());
for(ProvinceCityDistrict entity : parentList) {
ProvinceCityDistrictVO vo = new ProvinceCityDistrictVO();
vo.setCode(entity.getCode());
vo.setValue(entity.getName());
vo.setLabel(entity.getName());
findChildren(vo, list);
voList.add(vo);
}
}
private void findChildren(ProvinceCityDistrictVO parent, List<ProvinceCityDistrict> list) {
List<ProvinceCityDistrictVO> children = new ArrayList<>();
for(ProvinceCityDistrict entity : list) {
if ( parent.getCode().equals(entity.getParentCode()) ) {
ProvinceCityDistrictVO child = new ProvinceCityDistrictVO();
child.setCode(entity.getCode());
child.setValue(entity.getName());
child.setLabel(entity.getName());
children.add(child);
findChildren(child, list);
}
}
parent.setChildren(children);
}