java-buildTree生成树实现

List<object> list = new ArrayList();
//生成树
Map<String, TreeVo> nodeMap = buildTree(list);
// 获取所有根节点
List<TreeVo> roots = getRoots(nodeMap);
//排序
roots = roots.stream()
        .sorted(Comparator.comparing(TreeVo::getOrderBy()))
        .collect(Collectors.toList());
/**
  * 生成树
  * @param treeNodes
  * @return
  */
public Map<String, TreeVo> buildTree(List<object> treeNodes) {
     Map<String, TreeVo> nodeMap = new HashMap<>();
     //  创建变更项目树记录列表
     List<TreeVo> records = new ArrayList<>();

     //  遍历变更项目列表,转换为树模型并添加到记录列表中
     for (object node : treeNodes) {
         TreeVo treeVo = new TreeVo(node);
         //  将变更项目树模型添加到记录列表中
         records.add(treeVo);
         nodeMap.put(treeVo.getId(), treeVo);
     }

        for (TreeVo node : records) {
            TreeVo parentNode = nodeMap.get(node.getParentId());
            if (parentNode != null) {
                parentNode.addChild(node);
            }
        }
        return nodeMap;              
} 

    /**
     * 获取根节点
     * @param nodeMap
     * @return
     */
    public List<TreeVo> getRoots(Map<String, TreeVo> nodeMap) {
        return new ArrayList<>(nodeMap.values()).stream()
                .filter(node -> node.getParentId() == null || node.getParentId().isEmpty())
                .collect(Collectors.toList());
    }

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值