<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          別再寫一堆的 for 循環(huán)了!Java 8 中的 Stream 輕松遍歷樹形結(jié)構(gòu),是真的牛逼!

          共 2497字,需瀏覽 5分鐘

           ·

          2022-03-18 23:12

          可能平常會(huì)遇到一些需求,比如構(gòu)建菜單,構(gòu)建樹形結(jié)構(gòu),數(shù)據(jù)庫一般就使用父id來表示,為了降低數(shù)據(jù)庫的查詢壓力,我們可以使用Java8中的Stream流一次性把數(shù)據(jù)查出來,然后通過流式處理。

          我們一起來看看,代碼實(shí)現(xiàn)為了實(shí)現(xiàn)簡單,就模擬查看數(shù)據(jù)庫所有數(shù)據(jù)到List里面。

          實(shí)體類:Menu.java

          /**
          ?*?Menu
          ?*
          ?*?@author?lcry
          ?*?@date?2020/06/01?20:36
          ?*/
          ????@Data
          ????@Builder
          ????public?class?Menu?{
          ????/**
          ?????*?id
          ?????*/
          ?????public?Integer?id;
          ?????/**
          ?????*?名稱
          ?????*/
          ?????public?String?name;
          ?????/**
          ?????*?父id?,根節(jié)點(diǎn)為0
          ?????*/
          ?????public?Integer?parentId;
          ?????/**
          ?????*?子節(jié)點(diǎn)信息
          ?????*/
          ?????public?List
          ?childList;


          ????public?Menu(Integer?id,?String?name,?Integer?parentId)?{
          ????????this.id?=?id;
          ????????this.name?=?name;
          ????????this.parentId?=?parentId;
          ????}
          ????
          ????public?Menu(Integer?id,?String?name,?Integer?parentId,?List
          ?childList)?{
          ????????this.id?=?id;
          ????????this.name?=?name;
          ????????this.parentId?=?parentId;
          ????????this.childList?=?childList;
          ????}

          }

          遞歸組裝樹形結(jié)構(gòu):

          @Test
          public?void?testtree(){
          ????//模擬從數(shù)據(jù)庫查詢出來
          ????List
          ?menus?=?Arrays.asList(
          ????????????new?Menu(1,"根節(jié)點(diǎn)",0),
          ????????????new?Menu(2,"子節(jié)點(diǎn)1",1),
          ????????????new?Menu(3,"子節(jié)點(diǎn)1.1",2),
          ????????????new?Menu(4,"子節(jié)點(diǎn)1.2",2),
          ????????????new?Menu(5,"根節(jié)點(diǎn)1.3",2),
          ????????????new?Menu(6,"根節(jié)點(diǎn)2",1),
          ????????????new?Menu(7,"根節(jié)點(diǎn)2.1",6),
          ????????????new?Menu(8,"根節(jié)點(diǎn)2.2",6),
          ????????????new?Menu(9,"根節(jié)點(diǎn)2.2.1",7),
          ????????????new?Menu(10,"根節(jié)點(diǎn)2.2.2",7),
          ????????????new?Menu(11,"根節(jié)點(diǎn)3",1),
          ????????????new?Menu(12,"根節(jié)點(diǎn)3.1",11)
          ????);

          ????//獲取父節(jié)點(diǎn)
          ????List
          ?collect?=?menus.stream().filter(m?->?m.getParentId()?==?0).map(
          ????????????(m)?->?{
          ????????????????m.setChildList(getChildrens(m,?menus));
          ????????????????return?m;
          ????????????}
          ????).collect(Collectors.toList());
          ????System.out.println("-------轉(zhuǎn)json輸出結(jié)果-------");
          ????System.out.println(JSON.toJSON(collect));
          }

          /**
          ?*?遞歸查詢子節(jié)點(diǎn)
          ?*?@param?root??根節(jié)點(diǎn)
          ?*?@param?all???所有節(jié)點(diǎn)
          ?*?@return?根節(jié)點(diǎn)信息
          ?*/
          private?List
          ?getChildrens(Menu?root,?List?all)?{
          ????List
          ?children?=?all.stream().filter(m?->?{
          ????????return?Objects.equals(m.getParentId(),?root.getId());
          ????}).map(
          ????????????(m)?->?{
          ????????????????m.setChildList(getChildrens(m,?all));
          ????????????????return?m;
          ????????????}
          ????).collect(Collectors.toList());
          ????return?children;
          }

          格式化打印結(jié)果:

          原文鏈接:https://blog.csdn.net/qq_19244927/article/details/106481777/

          版權(quán)聲明:本文為CSDN博主「Lcry」的原創(chuàng)文章,遵循CC 4.0 BY-SA版權(quán)協(xié)議,轉(zhuǎn)載請附上原文出處鏈接及本聲明。




          程序汪資料鏈接

          程序汪接的7個(gè)私活都在這里,經(jīng)驗(yàn)整理

          Java項(xiàng)目分享 ?最新整理全集,找項(xiàng)目不累啦 07版

          堪稱神級的Spring Boot手冊,從基礎(chǔ)入門到實(shí)戰(zhàn)進(jìn)階

          臥槽!字節(jié)跳動(dòng)《算法中文手冊》火了,完整版 PDF 開放下載!

          臥槽!阿里大佬總結(jié)的《圖解Java》火了,完整版PDF開放下載!

          字節(jié)跳動(dòng)總結(jié)的設(shè)計(jì)模式 PDF 火了,完整版開放下載!


          歡迎添加程序汪個(gè)人微信 itwang009? 進(jìn)粉絲群或圍觀朋友圈


          瀏覽 69
          點(diǎn)贊
          評論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          評論
          圖片
          表情
          推薦
          點(diǎn)贊
          評論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  黄 色 视 频在线 | 久久久久久99精品无码 | 91麻豆精品久91 | 日本黄色视频网站在线观看 | 天天弄天天日 |