点此获取表sql(提取码:chen)
根据表分析出
所有的一级地区都是以0000结束
过滤出一级,遍历过滤出每一个一级下的二级
所有的省下的市和省的前两位相同,并且是00结尾(但是这里面的数据会包括父级的省,排除掉 0000结尾的即可)
过滤出的值是省下的二级市,直辖市下的区不是以00结尾
如果不为空遍历过滤出县即可,县是前四位相同
如果一级是直辖市,查出的二级市会是空,下面加一个判断,如果为空就查直辖市下的区
@Override
public List<Address> getAddressList() {
//1.把所有数据从数据库中查询出来
List<Address> allData =addressMapper.selectList(null);
//2.得到所有的省 code:后四位为0000(过滤0000结尾的)
List<Address> provs = allData.stream().filter(item -> item.getCode().endsWith("0000")).collect(Collectors.toList());
//3.根据省的code 获取市的集合 :后两位为00的为市
for (Address prov : provs) {
//获取所有的地级市
List<Address> citys = allData.stream().filter(city -> city.getCode().startsWith(prov.getCode().substring(0, 2)) && city.getCode().endsWith("00") && !city.getCode().endsWith("0000")).collect(Collectors.toList());
//将市封装进省内
if (citys != null && citys.size() > 0) {
for (Address city : citys) {
//从所有数据:allData中拿和当前city编码匹配的区县
//code 的前四位一样,就代表是该是下的区或者是县
List<Address> areas = allData.stream().filter(area -> city.getCode().substring(0, 4).equals(area.getCode().substring(0, 4)) && !city.getCode().equals(area.getCode())).collect(Collectors.toList());
city.setAddresses(areas);
}
prov.setAddresses(citys);
} else {
//说明是自治市,获取所有区封装
citys = allData.stream().filter(area -> area.getCode().substring(0, 3).equals(prov.getCode().substring(0, 3)) && !area.getCode().endsWith("0000")).collect(Collectors.toList());
prov.setAddresses(citys);
}
}
return provs;
}