Lombda表达式过滤实现三级联动(无父级ID)

点此获取表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;
  }

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值