Java 实现树结构计算各个节点数的和
private List<ESHomeSearchTreeVo> tree(List<ESHomeSearchTreeVo> allList){ // 构建的整个树数据 List<TreeNode<String>> treeNodeList = allList.stream().map(x -> { Map<String, Object> extraMap = new HashMap<>(); extraMap.put("num", x.getNum()); // 单个树数据构建 TreeNode<String> treeNode = new TreeNode<String>() .setId(String.valueOf(x.getId())) // 主键 .setParentId(String.valueOf(x.getParentId())) // 父节点ID .setName(x.getName()) // 名称 .setExtra(extraMap); return treeNode; }).collect(Collectors.toList()); // 配置 TreeNodeConfig treeNodeConfig = new TreeNodeConfig(); // 自定义属性名(修改默认名称) treeNodeConfig.setChildrenKey("children"); // 最大递归深度 treeNodeConfig.setDeep(10); //转换器 List<Tree<String>> treeNodes = TreeUtil.build(treeNodeList, "0", treeNodeConfig, (treeNode, tree) -> { // 给树节点赋值(还能set 父 或子节点树) tree.setId(treeNode.getId()); tree.setParentId(treeNode.getParentId()); tree.setName(treeNode.getName()); tree.putExtra("num", treeNode.getExtra().getOrDefault("num", null)); }); treeNodes.forEach(this::warehouse); List<ESHomeSearchTreeVo> esHomeSearchTreeVos = JSONUtil.toList(JSONUtil.toJsonStr(treeNodes), ESHomeSearchTreeVo.class); return esHomeSearchTreeVos; }
计算每个节点的值
private void warehouse(Tree<String> e) { // 如果没有子节点返回自己 if (e.getChildren() == null) { e.putExtra("num", e.get("num")); return; } // 有子节点的话进行相应处理 e.getChildren().forEach(this::warehouse); int num = e.getChildren().stream().mapToInt(m -> MapUtil.getInt(m, "num")).sum(); e.putExtra("num", num); }
结果:
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· 什么是nginx的强缓存和协商缓存
· 一文读懂知识蒸馏
· Manus爆火,是硬核还是营销?
2017-04-06 session应用:
2017-04-06 session