import lombok.Data;
import java.util.List;
@Data
public class AreaNode {
private String code;
private String name;
private String parentCode;
private List<AreaNode> subsets;
}
import net.sf.json.JSONArray;
import java.util.ArrayList;
import java.util.List;
import java.util.Objects;
public class AreaTree {
private List<AreaNode> areaList = new ArrayList<AreaNode>();
public AreaTree(List<AreaNode> areaList) {
this.areaList = areaList;
}
public List<AreaNode> builTree() {
List<AreaNode> treeMenus = new ArrayList<AreaNode>();
for (AreaNode menuNode : getRootNode()) {
menuNode = buildChilTree(menuNode);
treeMenus.add(menuNode);
}
return treeMenus;
}
private List<AreaNode> getRootNode() {
List<AreaNode> rootAreaLists = new ArrayList<AreaNode>();
for (AreaNode areaNode : areaList) {
if (areaNode.getParentCode() == null) {
rootAreaLists.add(areaNode);
}
}
return rootAreaLists;
}
private AreaNode buildChilTree(AreaNode parentNode) {
List<AreaNode> childNodes = new ArrayList<>();
for (AreaNode areaNode : areaList) {
if (Objects.equals(areaNode.getParentCode(), parentNode.getCode())) {
childNodes.add(buildChilTree(areaNode));
}
}
parentNode.setSubsets(childNodes);
return parentNode;
}
public static void main(String[] args) {
List<AreaNode> nodes = new ArrayList<>();
AreaNode node1 = new AreaNode();
node1.setCode("1");
node1.setName("node1");
AreaNode node2 = new AreaNode();
node2.setCode("2");
node2.setName("node2");
node2.setParentCode("1");
AreaNode node3 = new AreaNode();
node3.setCode("3");
node3.setName("node3");
node3.setParentCode("2");
nodes.add(node1);
nodes.add(node2);
nodes.add(node3);
List<AreaNode> nodeList = new ArrayList<>();
AreaTree areaTree = new AreaTree(nodes);
nodeList = areaTree.builTree();
JSONArray object = JSONArray.fromObject(nodeList);
System.out.println(object.toString());
}
}
[
{
"code": "1",
"name": "node1",
"parentCode": "",
"subsets": [
{
"code": "2",
"name": "node2",
"parentCode": "1",
"subsets": [
{
"code": "3",
"name": "node3",
"parentCode": "2",
"subsets": [
]
}
]
}
]
}
]