普通list和树状list互转
import java.util.ArrayList;
import java.util.List; public class TreeNode { private String id;
private String name;
private String parentId;
private String code;
private List<TreeNode> children; public TreeNode(String id, String name, String parentId, String code) {
this.id = id;
this.name = name;
this.parentId = parentId;
this.code = code;
} public void addChildren(TreeNode zone) {
if (children == null) {
children = new ArrayList<>();
}
children.add(zone);
} public String getId() {
return id;
} public void setId(String id) {
this.id = id;
} public String getName() {
return name;
} public void setName(String name) {
this.name = name;
} public String getParentId() {
return parentId;
} public void setParentId(String parentId) {
this.parentId = parentId;
} public String getCode() {
return code;
} public void setCode(String code) {
this.code = code;
} public List<TreeNode> getChildren() {
return children;
} public void setChildren(List<TreeNode> children) {
this.children = children;
} }
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors; import org.apache.commons.collections4.CollectionUtils; public class TreeUtils { /**
* 普通list转树状list
* @param treeNodeList
* @return
*/
public static List<TreeNode> list2Tree(List<TreeNode> treeNodeList) {
// Map<String, List<TreeNode>> zoneByParentIdMap = treeNodeList.stream().collect(Collectors.groupingBy(TreeNode::getParentId));
// treeNodeList.forEach(zone->zone.children = zoneByParentIdMap.get(zone.id));
// return treeNodeList.stream().filter(v -> v.parentId.equals("0")).collect(Collectors.toList()); Map<String, List<TreeNode>> nodeByParentIdMap = treeNodeList.stream().collect(Collectors.groupingBy(TreeNode::getParentId));
treeNodeList.forEach(node->node.setChildren(nodeByParentIdMap.get(node.getId())));
return treeNodeList.stream().filter(v -> v.getParentId().equals("0")).collect(Collectors.toList());
} /**
* 树状list转普通list
* @param list
* @return
*/
public static List<TreeNode> tree2list(List<TreeNode> list) {
List<TreeNode> result = new ArrayList<>();
for (TreeNode test : list) {
List<TreeNode> c = test.getChildren();
result.add(test);
if (!CollectionUtils.isEmpty(c)) {
result.addAll(tree2list(c));
test.setChildren(null);//
}
}
return result;
} public static void main(String[] args) {
List<TreeNode> nodeList = new ArrayList<>();
nodeList.add(new TreeNode("10", "福建省","0", "FJS"));
nodeList.add(new TreeNode("11", "福州","10", "FZ"));
nodeList.add(new TreeNode("12", "莆田","10", "PT"));
nodeList.add(new TreeNode("13", "泉州","10", "QZ"));
nodeList.add(new TreeNode("14", "厦门","10", "XM"));
nodeList.add(new TreeNode("15", "龙岩","10", "LY"));
nodeList.add(new TreeNode("20", "浙江省","0", "ZJS"));
nodeList.add(new TreeNode("21", "杭州","20", "HZ"));
nodeList.add(new TreeNode("22", "嘉兴","20", "JX"));
nodeList.add(new TreeNode("23", "宁波","20", "NB"));
List<TreeNode> treeList = TreeUtils.list2Tree(nodeList);
List<TreeNode> list = TreeUtils.tree2list(treeList);
List<TreeNode> treeList1 = TreeUtils.list2Tree(list);
}
}
普通list和树状list互转的更多相关文章
- 【BZOJ-3648】寝室管理 环套树 + 树状数组 + 点分治
3648: 寝室管理 Time Limit: 40 Sec Memory Limit: 512 MBSubmit: 239 Solved: 106[Submit][Status][Discuss] ...
- HDU 4947 GCD Array 容斥原理+树状数组
GCD Array Time Limit: 11000/5500 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others)Total ...
- HDU 4777 Rabbit Kingdom --容斥原理+树状数组
题意: 给一个数的序列,询问一些区间,问区间内与区间其他所有的数都互质的数有多少个. 解法: 直接搞有点难, 所谓正难则反,我们求区间内与其他随便某个数不互质的数有多少个,然后区间长度减去它就是答案了 ...
- bzoj3529(莫比乌斯反演+离线+树状数组)
在你以为理解mobus的时候,苦苦想通过化简公式来降低复杂度时,这题又打了我一巴掌. 看来我并没有理解到acmicpc比赛的宗旨啊. 这么多次查询可以考虑离线操作,使用树状数组单点更新. /***** ...
- BZOJ 3648: 寝室管理( 点分治 + 树状数组 )
1棵树的话, 点分治+你喜欢的数据结构(树状数组/线段树/平衡树)就可以秒掉, O(N log^2 N). 假如是环套树, 先去掉环上1条边, 然后O(N log^2 N)处理树(同上); 然后再O( ...
- hdu 4777 树状数组+合数分解
Rabbit Kingdom Time Limit: 6000/3000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) T ...
- hdu1540 Tunnel Warfare 线段树/树状数组
During the War of Resistance Against Japan, tunnel warfare was carried out extensively in the vast a ...
- 「模拟赛20180307」三元组 exclaim 枚举+树状数组
题目描述 给定 \(n,k\) ,求有多少个三元组 \((a,b,c)\) 满足 \(1≤a≤b≤c≤n\)且\(a + b^2 ≡ c^3\ (mod\ k)\). 输入 多组数据,第一行数据组数\ ...
- 【BZOJ3529】【SDOI2014】数表 (莫比乌斯反演+树状数组)
传送门 Description 有一张$n\times m$的数表,其第$i$行第$j$列 $(1≤i≤n,1≤j≤m)$ 的数值为能同时整除$i$和$j$的所有自然数之和.现在给定$a$,计算数表中 ...
随机推荐
- 在android项目中使用FontAwesome字体
在android项目中使用FontAweSome图标集,可以方便的适配各种屏幕分辨率,不必在各种不同分辨率文件夹中新建资源文件.使用字体是一种很巧妙的方法,把图像以字体的方式呈现,这样以前设置为and ...
- Java使用SQLServerBulKCopy实现批量插入SQLSqerver数据库
这是CodingSir的帖子说的(由于不够详细,我现在提供给详细的,上手即用): Microsoft SQL Server 的bcp命令可以快速将大型文件复制插入到数据库中,C#提供了SqlBulkC ...
- ElasticSearch解决深度分页性能存在的问题使用scoll来解决
现在我们全局搜索全部的数据,每次返回3条, 从 scroll 请求返回的结果反映了 search 发生时刻的索引状态,就像一个快照.后续的对文档的改动(索引.更新或者删除)都只会影响后面的搜索请求. ...
- MyBatis学习笔记(2)--缓存
一.什么是缓存 --存在于内存中的临时数据. 为什么使用缓存?--减少和数据库的交互次数,提高执行效率. 适用于缓存的数据: 1.经常查询并且不经常改变的数据. 2.数据的正确与否对最终结果影响较小的 ...
- Ubuntu k80深度学习环境搭建
英伟达驱动安装 英伟达驱动下载:https://www.nvidia.cn/Download/driverResults.aspx/135493/cn/ 由于是驱动的冲突,那么自然是要杀掉和显卡结合不 ...
- python从文件载入字典
data = np.load('dict_.npy') data = data.item() 不加最后一句,data不是字典类型
- 在MFC下绘制直线,使用橡皮筋技术,可以使直线效果跟随鼠标移
void CGraphic1View::OnMouseMove(UINT nFlags, CPoint point) { if(MK_LBUTTON == nFlags) { ...
- HttPclient 以post方式发送json
使用HttpClient 以POST的形式发送json字符串 步骤: 1.url .parameters 2.创建httpClient对象 3.创建HttpPost对象 4.为post对象设置参数 5 ...
- jQuery jqGrid 4.7
https://jeesite.gitee.io/front/jqGrid/4.7/index.html https://jeesite.gitee.io/front/jqGrid/4.7/jqgri ...
- 学习前端的时候,突然想起了Sharepoint母版页里的占位符,算知识的融会不?
今天看到这个段话,我就想起来当时学习Sharepoint的时候,总是搞不明白我们老师讲的那个母版页里的占位符到底是干啥的.现在看到了类似的东西,让我想起来了之前一直搞不懂的东西,很感慨. (完)