public static List<Node> buildSourceData() {
// 124 35
return new ArrayList<>(){{
add(new Node(1, 0, "一"));
add(new Node(2, 1, "二"));
add(new Node(3, 2, "三"));
add(new Node(4, 1, "四"));
add(new Node(5, 4, "五"));
add(new Node(6, 0, "6"));
add(new Node(7, 0, "7"));
add(new Node(8, 6, "8"));
add(new Node(9, 6, "9"));
}};
}
public static void main(String[] args) {
List<Node> nodes = buildSourceData();
List<Node> nodes1 = buildTree(nodes);
System.out.println(JSON.toJSONString(nodes1));
}
public static List<Node> buildTree(List<Node> nodes) {
// 1. 过滤出pid 非0数据 2.根据pid分组,供后续查询
Map<Integer, List<Node>> nodeMap = nodes.stream().filter(node -> node.getPid() != 0)
.collect(Collectors.groupingBy(Node::getPid));
// 使用id = pid循环获取
nodes.forEach(node -> node.setTreeNode(nodeMap.get(node.getId())));
// 获取第一层pid不是0的数据,没有根节点的数据
return nodes.stream().filter(node -> node.getPid() == 0).toList();
}
public static class Node {
private Integer id;
private Integer pid;
private String name;
private List<Node> treeNode = new ArrayList<>();
public List<Node> getTreeNode() {
return treeNode;
}
public void setTreeNode(List<Node> treeNode) {
this.treeNode = treeNode;
}
public Node() {
}
public Node(Integer id, Integer pid, String name) {
this.id = id;
this.pid = pid;
this.name = name;
}
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public Integer getPid() {
return pid;
}
public void setPid(Integer pid) {
this.pid = pid;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
java使用stream流创建低深度树形结构
发布时间 2023-09-11 10:02:57作者: XSWClevo