省市區一次性獲取全部數據使用遞歸算法處理成上下級

數據庫的數據結構

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);
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章