Java知识点整理正在进行中,关注我,持续给您带来简单,实用的Java编程技巧。
在Java开发中,有时候会遇到将存在父子关系的集合转化为树形接口的场景,比如菜单数据的处理。这时可以使用stream归纳出树形结构。
具体看代码:
package com.bbzd.stream.treelist;
import java.util.List;
/**
* 节点实体类
* 包含子节点列表childrenList
* @date 2022/10/3 - 20:59
*/
public class Node {
//节点ID
private String id;
//节点名称
private String name;
//父节点ID
private String pid;
//子节点列表
private List childrenList;
public Node(String id, String name, String pid) {
this.id = id;
this.name = name;
this.pid = pid;
}
/*
为了节省篇幅,此处省去get,set方法
*/
@Override
public String toString() {
return "Node{" +
"id='" + id + ''' +
", name='" + name + ''' +
", pid='" + pid + ''' +
", childrenList=" + childrenList +
'}';
}
}
package com.bbzd.stream.treelist;
import java.util.ArrayList;
import java.util.List;
import java.util.stream.Collectors;
/**
* 示例:用流的方式归纳树型结构节点
* @date 2022/10/3 - 21:04
*/
public class StreamTreeListDemo {
public static void main(String[] args) {
/*节点信息,一级节点是省,二级节点是市,三级节点是区
节点关系:
河北省 -> 沧州市 -> 华新区
-> 运河区
河南省 -> 开封市 -> 鼓楼区
-> 龙亭区
*/
Node node1=new Node("1","河北省","0");
Node node2=new Node("2","沧州市","1");
Node node3=new Node("3","华新区","2");
Node node4=new Node("4","运河区","2");
Node node5=new Node("5","河南省","0");
Node node6=new Node("6","开封市","5");
Node node7=new Node("7","鼓楼区","6");
Node node8=new Node("8","龙亭区","6");
List nodeList=new ArrayList<>();
nodeList.add(node1);
nodeList.add(node2);
nodeList.add(node3);
nodeList.add(node4);
nodeList.add(node5);
nodeList.add(node6);
nodeList.add(node7);
nodeList.add(node8);
//0代表一级节点
List treeList=streamToTree(nodeList,"0");
//输出显示归纳后的结果
System.out.println(treeList);
}
/**
* 将节点列表归纳成树结构的方式
* @param nodeList 节点列表
* @param pid 父节点ID
* @return 树结构的节点
*/
public static List streamToTree(
List nodeList,
String pid){
List list=nodeList.stream()
//过滤一级节点
.filter(parent -> parent.getPid().equals(pid))
//对二级节点和三级递归进行归纳,归纳到对应的父节点上
.map(child ->{
child.setChildrenList(streamToTree(nodeList,child.getId()));
return child;
})
.collect(Collectors.toList());
return list;
}
}
程序处理后,节点集合已经按父子关系归纳成了树形结构,输出结果
Node{id='1', name='河北省', pid='0', childrenList=[Node{id='2', name='沧州市', pid='1', childrenList=[Node{id='3', name='华新区', pid='2', childrenList=[]}, Node{id='4', name='运河区', pid='2', childrenList=[]}]}]}, Node{id='5', name='河南省', pid='0', childrenList=[Node{id='6', name='开封市', pid='5', childrenList=[Node{id='7', name='鼓楼区', pid='6', childrenList=[]}, Node{id='8', name='龙亭区', pid='6', childrenList=[]}]}]}
总结
页面更新:2024-03-25
本站资料均由网友自行发布提供,仅用于学习交流。如有版权问题,请与我联系,QQ:4156828
© CopyRight 2020-2024 All Rights Reserved. Powered By 71396.com 闽ICP备11008920号-4
闽公网安备35020302034903号