适用于父子关系的数据结构
//从数据库中查找所有地址
@Select("select t.id as addressId,t.address_name as addressName,t.parent_id as parentId from t_equipment_address t")
public List<EquipmentAddressVo> getAllEquipmentAddress();
//工具类
public class TreeUtil {
// RecursiveEquipmentType
public static List<EquipmentAddressVo> RecursiveAddress(List<EquipmentAddressVo> treeNodes){
List<EquipmentAddressVo> trees = new ArrayList<EquipmentAddressVo>();
for (EquipmentAddressVo treeNode : treeNodes) {
if ("".equals(treeNode.getParentId()) || null==treeNode.getParentId() ) {
trees.add(findAddressChildren(treeNode,treeNodes));
}
}
return trees;
}
/**
* 递归查找地址子节点
* @param treeNodes
* @return
*/
public static EquipmentAddressVo findAddressChildren(EquipmentAddressVo treeNode,List<EquipmentAddressVo> treeNodes) {
for (EquipmentAddressVo it : treeNodes) {
if(treeNode.getAddressId().equals(it.getParentId())) {
if (treeNode.getChildren() == null) {
treeNode.setChildren(new ArrayList<EquipmentAddressVo>());
}
treeNode.getChildren().add(findAddressChildren(it,treeNodes));
}
}
return treeNode;
}
}
//vo实体类
public class EquipmentAddressVo {
/**
* 地址ID
*/
@ApiModelProperty("地址ID")
private String addressId;
/**
* 地址名称
*/
@ApiModelProperty("地址名称")
private String addressName;
/**
* 父级地址ID
*/
@ApiModelProperty("父级地址ID")
private String parentId;
private List<EquipmentAddressVo> children;
public List<EquipmentAddressVo> getChildren() {
return children;
}
public void setChildren(List<EquipmentAddressVo> children) {
this.children = children;
}
public String getAddressId() {
return addressId;
}
public void setAddressId(String addressId) {
this.addressId = addressId;
}
public String getAddressName() {
return addressName;
}
public void setAddressName(String addressName) {
this.addressName = addressName;
}
public String getParentId() {
return parentId;
}
public void setParentId(String parentId) {
this.parentId = parentId;
}
}
//controller层 将数据库中的地址使用treeutil类进行递归封装
List<EquipmentAddressVo> list = equipmentAddressService.getAllEquipmentAddress();
ResultMsg = new ResultMsg(ResultStatusCode.OK,TreeUtil.RecursiveAddress(list));
返回结果:
{
"code": 200,
"msg": "OK",
"data": [
{
"addressId": "5dcc1568f5ca11e78dcb96adab3e1483",
"addressName": "广东",
"parentId": null,
"children": [
{
"addressId": "97f24626f5ca11e78dcb96adab3e1483",
"addressName": "深圳",
"parentId": "5dcc1568f5ca11e78dcb96adab3e1483",
"children": [
{
"addressId": "803b083df78411e78dcb96adab3e1483",
"addressName": "二楼标准件仓",
"parentId": "97f24626f5ca11e78dcb96adab3e1483",
"children": null
},
{
"addressId": "d39844b0f5ca11e78dcb96adab3e1483",
"addressName": "五楼咖啡厅",
"parentId": "97f24626f5ca11e78dcb96adab3e1483",
"children": null
},
{
"addressId": "d39cbe3bf5ca11e78dcb96adab3e1483",
"addressName": "四楼行政部",
"parentId": "97f24626f5ca11e78dcb96adab3e1483",
"children": null
},
{
"addressId": "d3a0b68cf5ca11e78dcb96adab3e1483",
"addressName": "五楼平台部",
"parentId": "97f24626f5ca11e78dcb96adab3e1483",
"children": null
},
{
"addressId": "d3a4d224f5ca11e78dcb96adab3e1483",
"addressName": "三楼车间",
"parentId": "97f24626f5ca11e78dcb96adab3e1483",
"children": null
},
{
"addressId": "d3a930b0f5ca11e78dcb96adab3e1483",
"addressName": "财务室",
"parentId": "97f24626f5ca11e78dcb96adab3e1483",
"children": null
},
{
"addressId": "d3ac5a2df5ca11e78dcb96adab3e1483",
"addressName": "食堂",
"parentId": "97f24626f5ca11e78dcb96adab3e1483",
"children": null
}
]
}
]
},
{
"addressId": "5dd1a5b3f5ca11e78dcb96adab3e1483",
"addressName": "湖南",
"parentId": null,
"children": [
{
"addressId": "97f9d0c6f5ca11e78dcb96adab3e1483",
"addressName": "长沙",
"parentId": "5dd1a5b3f5ca11e78dcb96adab3e1483",
"children": [
{
"addressId": "650a19cff5cb11e78dcb96adab3e1483",
"addressName": "A栋一楼",
"parentId": "97f9d0c6f5ca11e78dcb96adab3e1483",
"children": null
},
{
"addressId": "650ca4c3f5cb11e78dcb96adab3e1483",
"addressName": "保安室(大门)",
"parentId": "97f9d0c6f5ca11e78dcb96adab3e1483",
"children": null
},
{
"addressId": "650ffa8ff5cb11e78dcb96adab3e1483",
"addressName": "A栋二楼",
"parentId": "97f9d0c6f5ca11e78dcb96adab3e1483",
"children": null
},
{
"addressId": "651382c3f5cb11e78dcb96adab3e1483",
"addressName": "A栋三楼",
"parentId": "97f9d0c6f5ca11e78dcb96adab3e1483",
"children": null
},
{
"addressId": "65176866f5cb11e78dcb96adab3e1483",
"addressName": "B栋一楼",
"parentId": "97f9d0c6f5ca11e78dcb96adab3e1483",
"children": null
},
{
"addressId": "651b02aef5cb11e78dcb96adab3e1483",
"addressName": "B栋二楼",
"parentId": "97f9d0c6f5ca11e78dcb96adab3e1483",
"children": null
}
]
}
]
}
]
}