日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

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

發布時間:2023/12/29 编程问答 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 java 树形数据_JAVA处理树状结构数据 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

之前對于樹狀結構的處理沒什么困難,但是最近的一個需求就很麻煩。其實遍歷出樹狀結構并不是什么困難的事情,但是這個需求需要從底層節點統計數量,然后向上修改所有的父級結構。

最難的地方就是這個地方,可能有的子節點大部分是最后一級,但是平級可能還會有多層數據。之前試過用遞歸結構實現。但是容易造成死鎖,原因就是在向上修改數據時平級的子節點也在

向上修改,就會造成死鎖。這個需求擱置了很久,一直沒有什么好辦法。

直到前幾天瀏覽文章時突然看到了,stream流的排序功能,突然思如泉涌。排序算法可以自定義還能支持多層排序,一步一步梳理完成。

我的思路是這樣的,先拿到所有的二級結構,因為二級結構需要做最后的數據匯總,然后遍歷出所有的二級結構樹,這里可能數據庫的設計師不一致的。但是,思路可以通用,這邊我這個數

據里面保存了一個節點路徑,

先使用條件限定查找范圍,因為字符串的匹配可能不精確。通過二級節點搜索包含節點id的路徑,用list集合包裝起來。這樣每個二級節點就是一個單獨的樹,再做處理就方便多了。

如果沒有好的條件可以快速定位節點,建議使用遞歸,通過關聯關系遍歷獲取數據。建議存入list集合,因為只在后臺計算的話逆向遍歷樹結構很麻煩。這是一個樹結構的實體

如果是這種結構的話,遍歷太容易死鎖。然后對這幾個list集合進行排序,這里有個示例,通過子父id進行排序

list.stream().sorted((s1,s2)->{

if(s1.getPid = s2.getId){

return 1;

}

}).forEach(System.out::println);

如果還有其他的排序需求,直接接上thenCompaing可繼續對集合進行排序。然后用stream中的limit方法切割集合,找到集合中id不作為任何元素PID的數據,從這個位置開始切割。然后開始對數據進行處理。第一位的數據就是你的第三層結構,注意這里要對你的一級二級結構做判斷如果沒有下級就直接修改,然后吧第三級匯總至第二級,最后用stream流求第二級總和,存入第一級節點就ok。說起來很繞,但是面對樹狀結構最好使用圖數據庫,或者添加路徑以及其他索引方式,不要只用子父id對應。

總結

以上是生活随笔為你收集整理的java 树形数据_JAVA处理树状结构数据的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。