java 树形数据_JAVA处理树状结构数据

之前对于树状结构的处理没什么困难,但是最近的一个需求就很麻烦。其实遍历出树状结构并不是什么困难的事情,但是这个需求需要从底层节点统计数量,然后向上修改所有的父级结构。

最难的地方就是这个地方,可能有的子节点大部分是最后一级,但是平级可能还会有多层数据。之前试过用递归结构实现。但是容易造成死锁,原因就是在向上修改数据时平级的子节点也在

向上修改,就会造成死锁。这个需求搁置了很久,一直没有什么好办法。

直到前几天浏览文章时突然看到了,stream流的排序功能,突然思如泉涌。排序算法可以自定义还能支持多层排序,一步一步梳理完成。

我的思路是这样的,先拿到所有的二级结构,因为二级结构需要做最后的数据汇总,然后遍历出所有的二级结构树,这里可能数据库的设计师不一致的。但是,思路可以通用,这边我这个数

据里面保存了一个节点路径,

96c919a1848c88baf6c86d5d1f593715.png

先使用条件限定查找范围,因为字符串的匹配可能不精确。通过二级节点搜索包含节点id的路径,用list集合包装起来。这样每个二级节点就是一个单独的树,再做处理就方便多了。

如果没有好的条件可以快速定位节点,建议使用递归,通过关联关系遍历获取数据。建议存入list集合,因为只在后台计算的话逆向遍历树结构很麻烦。这是一个树结构的实体

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值