java 省,市,区数据格式封装

数据格式,省下面有多个城市,城市下面又有多个区,如下图是数据的格式

id,名称,父id(就是上一级的id,比如,南宁市是属于广西壮族自治区下的一个城市,那么南宁市对应的父id就是广西自治区的id)

代码具体实现

  • 数据库表对应的实体
@Data
public class Area {
   /**索引ID*/
   private java.lang.Integer id;
   /**创建人*/
   private java.lang.String createBy;
   /**创建时间*/
   private java.util.Date createTime;
   /**修改人*/
   private java.lang.String updateBy;
   /**修改时间*/
   private java.util.Date updateTime;
   /**地区名称*/
   private java.lang.String areaName;
   /**地区父ID*/
   private java.lang.Integer areaParentId;
   /**邮政编码*/
   private java.lang.String postcode;
   /**地区深度,从1开始*/
   private java.lang.Integer areaDeep;
}
  • 创建一个实体类,用于数据封装,其中List<?> 中的 ?是一个泛型数据。

@Data
public class AreaVo {

    /**
     * 索引ID
     */
    private Integer id;
    /**
     * 地区名称
     */
    private String areaName;
    /**
     * 地区父ID
     */
    private Integer areaParentId;
 

    private List<?> areas;
}

  • 逻辑代码,涉及到 lambda 表达式;
public List<AreaVo> analyzeArea(List<Area> list) {
    //拿出所有的省级数据
    List<Area> areas = list.stream().filter(f -> f.getAreaParentId() == 0)
            .collect(Collectors.toList());
    List<AreaVo> p = new ArrayList<>();
    for (Area area : areas) {
        //省份下的城市
        List<Area> collect = list.stream().filter(f -> f.getAreaParentId().equals(area.getId()))
                .collect(Collectors.toList());

        AreaVo areaVo = new AreaVo();
        areaVo.setId(area.getId());//省id
        areaVo.setAreaName(area.getAreaName());//省名称
        List<AreaVo> cityList = new ArrayList<>();
        for (Area city : collect) {
            //城市下的所有区
            List<Area> district = list.stream().filter(f -> f.getAreaParentId().equals(city.getId()))
                    .collect(Collectors.toList());
            List<AreaVo> vos = JSONUtil.toList(JSONUtil.parseArray(district), AreaVo.class);

            AreaVo c = new AreaVo();
            c.setId(city.getId());//城市id
            c.setAreaName(city.getAreaName());//城市名称
            c.setAreas(vos);//所有区

            cityList.add(c);
        }
        //省城市
        areaVo.setAreas(cityList);
        p.add(areaVo);
    }
    return p;
}
  • 调用方法
public Result<?> queryArea() {
    List<Area> list = areaService.list();//查询所有的的数据出来
    List<AreaVo> vos = analyzeArea(list);
    return Result.ok(vos);
}
public List<AreaVo> analyzeArea(List<Area> list) {
    //拿出所有的省级数据
    List<Area> areas = list.stream().filter(f -> f.getAreaParentId() == 0)
            .collect(Collectors.toList());
    List<AreaVo> p = new ArrayList<>();
    for (Area area : areas) {
        //省份下的城市
        List<Area> collect = list.stream().filter(f -> f.getAreaParentId().equals(area.getId()))
                .collect(Collectors.toList());

        AreaVo areaVo = new AreaVo();
        areaVo.setId(area.getId());//省id
        areaVo.setAreaName(area.getAreaName());//省名称
        List<AreaVo> cityList = new ArrayList<>();
        for (Area city : collect) {
            //城市下的所有区
            List<Area> district = list.stream().filter(f -> f.getAreaParentId().equals(city.getId()))
                    .collect(Collectors.toList());
            List<AreaVo> vos = JSONUtil.toList(JSONUtil.parseArray(district), AreaVo.class);

            AreaVo c = new AreaVo();
            c.setId(city.getId());//城市id
            c.setAreaName(city.getAreaName());//城市名称
            c.setAreas(vos);//所有区

            cityList.add(c);
        }
        //省城市
        areaVo.setAreas(cityList);
        p.add(areaVo);
    }
    return p;
}

封装完毕

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值