java递归遍历行政区域

早上拉取的高德地图的行政区域数据到本地,前端需要返回相应的属性结构接口,用递归的方法解决了,上代码~

DAO类:

public class AmpArea implements Serializable {

	private static final long serialVersionUID = 1L;

	/**
	 * 主键
	 */
	@TableId(value = "id", type = IdType.AUTO)
	private Long id;

	/**
	 * 1省,2市,3:区县
	 */
	private String level;

	/**
	 * 行政区名称
	 */
	private String name;

	/**
	 * 编码
	 */
	private String code;

	/**
	 * 父编码
	 */
	private String parentCode;

	/**
	 * 区域中心点(经度,维度)
	 */
	private String center;

	/**
	 * 创建时间
	 */
	private LocalDateTime createTime;

	/**
	 * 修改时间
	 */
	private LocalDateTime updateTime;

	/**
	 * 数据删除标识
	 */
	private Boolean deleteFlag;


}

返回结果类:

public class AmpAreaTreeResVO {

	private Long id;

	@ApiModelProperty(value = "1省,2市,3:区县")
	private String level;

	@ApiModelProperty(value = "行政区名称")
	private String name;

	@ApiModelProperty(value = "编码")
	private String code;

	@ApiModelProperty(value = "父编码")
	private String parentCode;

	@ApiModelProperty(value = "区域中心点(经度,维度)")
	private String center;

	@ApiModelProperty(value = "子节点")
	private List<AmpAreaTreeResVO> children;
}

service层:

@Override
public List<AmpAreaTreeResVO> getAmpAreaTree() {
	List<AmpArea> areas = this.list(new LambdaQueryWrapper<>(new AmpArea()).eq(AmpArea::getLevel, AreaDistrictsType.PROCINCE.getKey()));
	List<AmpAreaTreeResVO> res = areas.stream().map(m -> {
		AmpAreaTreeResVO resVO = BeanCopyUtils.copyProperties(m, AmpAreaTreeResVO.class);
		resVO.setChildren(getChild(m));
		return resVO;
	}).collect(Collectors.toList());
	return res;
}


public List<AmpAreaTreeResVO> getChild(AmpArea ampArea) {
	List<AmpAreaTreeResVO> res = new ArrayList<>();
	List<AmpArea> areas = new ArrayList<>();
	//level层级只需要到3
	if (!ampArea.getLevel().equals(AreaDistrictsType.DISTRICTS.getKey())) {
		areas = this.list(new LambdaQueryWrapper<>(new AmpArea()).eq(AmpArea::getParentCode, ampArea.getCode()));
	}
	if (areas.size() > 0) {
		res = areas.stream().map(m -> {
			AmpAreaTreeResVO resVO = BeanCopyUtils.copyProperties(m, AmpAreaTreeResVO.class);
			resVO.setChildren(getChild(m));
			return resVO;
		}).collect(Collectors.toList());
	}
	return res;
}
  • 11
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值