普通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$,计算数表中 ...
随机推荐
- 【Flutter实战】图片组件及四大案例
老孟导读:大家好,这是[Flutter实战]系列文章的第三篇,这一篇讲解图片组件,Image有很多高级用法,希望对您有所帮助. 图片组件是Flutter基础组件之一,和文本组件一样必不可少.图片组件包 ...
- 消息队列——RabbitMQ的基本使用及高级特性
文章目录 一.引言 二.基本使用 1. 简单示例 2. work queue和公平消费消息 3. 交换机 三.高级特性 1. 消息过期 2. 死信队列 3. 延迟队列 4. 优先级队列 5. 流量控制 ...
- 这一次搞懂SpringMVC原理
@ 目录 前言 正文 请求入口 组件初始化 调用Controller 参数.返回值解析 总结 前言 前面几篇文章,学习了Spring IOC.Bean实例化过程.AOP.事务的源码和设计思想,了解了S ...
- Web前端 -- Webpack
一.Webpack Webpack 是一个前端资源加载/打包工具.它将根据模块的依赖关系进行静态分析,然后将这些模块按照指定的规则生成对应的静态资源. 二.Webpack安装 1.全局安装 npm i ...
- redis概要学习
redis 概要学习 redis简介 Redis 是完全开源免费的,遵守BSD协议,是一个高性能的key-value数据库. Redis 与其他 key - value 缓存产品有以下三个特点: Re ...
- WeChair项目Beta冲刺(9/10)
团队项目进行情况 1.昨日进展 Beta冲刺第九天 昨日进展: 项目开始扫尾 2.今日安排 前端:前端工作已经完成 后端:扫码占座后端测试,实现对超时预约座位下座的功能 数据库:和后端组织协商扫 ...
- WeChair项目Alpha冲刺(4/10)
团队项目进行情况 1.昨日进展 Alpha冲刺第四天 昨日进展: 前端完成小程序登录态的定义 LoginController编写初步完成同时修改并更新了代码,但是在将编码好的项目部署到服务器上时 ...
- 微信小程序-页面栈
在小程序中以栈的形式维护了当前的所有页面 当发生路由切换的时候,页面栈的表现如下: 初始化:新页面入栈 打开新页面:新页面入栈(调用 API wx.navigateTo 或使用组件 <navig ...
- 解决React Native安装应用到真机(红米3S)报Execution failed for task ':app:installDebug'的错误
报错信息如下: :app:installDebug Installing APK 'app-debug.apk' on 'Redmi 3S - 6.0.1'Unable to install D:\R ...
- android 6.0 权限设置详解
从Android 6.0版本开始,在安装应用时,该应用无法取得任何权限. 相反,在使用应用的过程中,若某个功能需要获取某个权限,系统会弹出一个对话框,显式地由用户决定是否将该权限赋予应用. 只有得到了 ...