国产亚洲精品福利在线无卡一,国产精久久一区二区三区,亚洲精品无码国模,精品久久久久久无码专区不卡

當(dāng)前位置: 首頁(yè) > news >正文

日?qǐng)?bào)做的地方網(wǎng)站近期發(fā)生的新聞

日?qǐng)?bào)做的地方網(wǎng)站,近期發(fā)生的新聞,杭州 洛陽(yáng)網(wǎng)站建設(shè)公司 網(wǎng)絡(luò)服務(wù),織夢(mèng)政府網(wǎng)站源碼簡(jiǎn)介: 在實(shí)際開(kāi)發(fā)中,構(gòu)建樹(shù)狀層次結(jié)構(gòu)是常見(jiàn)需求,如組織架構(gòu)、目錄結(jié)構(gòu)或菜單系統(tǒng)。本教案通過(guò)解析給定的Java代碼,展示如何使用Java 8 Stream API將扁平化的菜單數(shù)據(jù)轉(zhuǎn)換為具有層級(jí)關(guān)系的樹(shù)形結(jié)構(gòu)。 1. 核心類(lèi)定義 - Menu Data…

簡(jiǎn)介:

????????在實(shí)際開(kāi)發(fā)中,構(gòu)建樹(shù)狀層次結(jié)構(gòu)是常見(jiàn)需求,如組織架構(gòu)、目錄結(jié)構(gòu)或菜單系統(tǒng)。本教案通過(guò)解析給定的Java代碼,展示如何使用Java 8 Stream API將扁平化的菜單數(shù)據(jù)轉(zhuǎn)換為具有層級(jí)關(guān)系的樹(shù)形結(jié)構(gòu)。

1. 核心類(lèi)定義 - Menu

@Data
@NoArgsConstructor
@AllArgsConstructor
static class Menu {private Long id;private String name;private Long parentId;private List<Menu> children;
}

提示:此處定義了一個(gè)名為Menu的類(lèi),它包含了菜單項(xiàng)的基本屬性,包括ID、名稱(chēng)、父菜單ID以及一個(gè)用于存儲(chǔ)子菜單項(xiàng)的列表。

2. main方法解析及實(shí)現(xiàn)功能


輸入?yún)?shù):

  • List<Menu> menus:包含所有菜單項(xiàng)的集合。

輸出結(jié)果:

  • List<Menu>:一個(gè)僅包含頂級(jí)菜單項(xiàng)的列表,每個(gè)頂級(jí)菜單項(xiàng)已填充了其下級(jí)子菜單。
public static void main(String[] args) {List<Menu> menus = menusData();/*** 從菜單列表中篩選出頂級(jí)菜單,并為其添加子菜單。** @param menus 菜單列表,包含所有菜單項(xiàng)。* @return 包含所有頂級(jí)菜單的列表,其中每個(gè)頂級(jí)菜單均已包含其所有子菜單。*/List<Menu> topLevelMenus = menus.stream() // 使用流處理menus集合.filter(menu -> menu.getParentId() == 0 || menus.stream().noneMatch(other -> other.getId().equals(menu.getParentId()))) // 篩選條件:父菜單ID為0或不存在對(duì)應(yīng)父菜單的菜單項(xiàng).peek(menu -> menu.setChildren(getChildren(menu, menus))) // 為每個(gè)頂級(jí)菜單設(shè)置子菜單.collect(Collectors.toList()); // 將篩選后的頂級(jí)菜單集合轉(zhuǎn)換為L(zhǎng)ist(Menu)類(lèi)型}

?3. 輔助方法——獲取指定菜單的所有子菜單

 /*** 獲取指定菜單的所有子菜單。** @param menu 指定的菜單對(duì)象,我們要查找它的子菜單。* @param menus 所有菜單的列表,從中篩選出子菜單。* @return 返回一個(gè)包含指定菜單所有子菜單的列表。這個(gè)列表中的每個(gè)菜單對(duì)象都可能包含它們自己的子菜單列表。*/private static List<Menu> getChildren(Menu menu, List<Menu> menus) {// 使用流對(duì)菜單列表進(jìn)行處理,篩選出指定菜單的子菜單return menus.stream().filter(child -> child.getParentId().equals(menu.getId())) // 篩選條件:菜單的父菜單ID與指定菜單ID匹配.peek(child -> child.setChildren(getChildren(child, menus))) // 遞歸設(shè)置每個(gè)子菜單的子菜單列表.collect(Collectors.toList()); // 收集結(jié)果,生成列表}

4. 示例數(shù)據(jù)生成方法 —— menusData()

private static List<Menu> menusData() {return Arrays.asList(new Menu(1L, "一級(jí)菜單1", 0L, null),new Menu(2L, "二級(jí)菜單1", 1L, null),new Menu(3L, "三級(jí)菜單1", 2L, null),new Menu(4L, "一級(jí)菜單2", 0L, null),new Menu(5L, "二級(jí)菜單2", 4L, null),new Menu(6L, "一級(jí)菜單3", 0L, null));
}

5.完整代碼,以及演示(TreeExample.java)

package com.tenement.auto;import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.util.Arrays;
import java.util.List;
import java.util.stream.Collectors;public class TreeExample {@Data@NoArgsConstructor@AllArgsConstructorstaticclass Menu {private Long id;private String name;private Long parentId;private List<Menu> children;}public static void main(String[] args) {List<Menu> menus = menusData();/*** 從菜單列表中篩選出頂級(jí)菜單,并為其添加子菜單。** @param menus 菜單列表,包含所有菜單項(xiàng)。* @return 包含所有頂級(jí)菜單的列表,其中每個(gè)頂級(jí)菜單均已包含其所有子菜單。*/List<Menu> topLevelMenus = menus.stream() // 使用流處理menus集合.filter(menu -> menu.getParentId() == 0 || menus.stream().noneMatch(other -> other.getId().equals(menu.getParentId()))) // 篩選條件:父菜單ID為0或不存在對(duì)應(yīng)父菜單的菜單項(xiàng).peek(menu -> menu.setChildren(getChildren(menu, menus))) // 為每個(gè)頂級(jí)菜單設(shè)置子菜單.collect(Collectors.toList()); // 將篩選后的頂級(jí)菜單集合轉(zhuǎn)換為L(zhǎng)ist(Menu)類(lèi)型}/*** 獲取指定菜單的所有子菜單。** @param menu 指定的菜單對(duì)象,我們要查找它的子菜單。* @param menus 所有菜單的列表,從中篩選出子菜單。* @return 返回一個(gè)包含指定菜單所有子菜單的列表。這個(gè)列表中的每個(gè)菜單對(duì)象都可能包含它們自己的子菜單列表。*/private static List<Menu> getChildren(Menu menu, List<Menu> menus) {// 使用流對(duì)菜單列表進(jìn)行處理,篩選出指定菜單的子菜單return menus.stream().filter(child -> child.getParentId().equals(menu.getId())) // 篩選條件:菜單的父菜單ID與指定菜單ID匹配.peek(child -> child.setChildren(getChildren(child, menus))) // 遞歸設(shè)置每個(gè)子菜單的子菜單列表.collect(Collectors.toList()); // 收集結(jié)果,生成列表}private static List<Menu> menusData() {return Arrays.asList(new Menu(1L, "一級(jí)菜單1", 0L,null),new Menu(2L, "二級(jí)菜單1", 1L,null),new Menu(3L, "三級(jí)菜單1", 2L,null),new Menu(4L, "一級(jí)菜單2", 0L,null),new Menu(5L, "二級(jí)菜單2", 4L,null),new Menu(6L, "一級(jí)菜單3", 0L,null));}}

總結(jié):該案例展示了如何利用Java 的Stream API對(duì)菜單數(shù)據(jù)進(jìn)行處理,首先篩選出頂級(jí)菜單項(xiàng),并通過(guò)遞歸方式為其添加子菜單。最后,得到了一個(gè)完整的樹(shù)形菜單結(jié)構(gòu)。?

http://m.aloenet.com.cn/news/34896.html

相關(guān)文章:

  • 做家裝網(wǎng)站客戶(hù)來(lái)源多嗎百度百家號(hào)怎么賺錢(qián)
  • 做網(wǎng)站怎么租個(gè)域名百度搜索引擎的優(yōu)缺點(diǎn)
  • 廣告網(wǎng)站 源碼搜索網(wǎng)站排名
  • 現(xiàn)在那個(gè)網(wǎng)站做視頻最賺錢(qián)嗎湖南靠譜關(guān)鍵詞優(yōu)化
  • 做公司網(wǎng)站軟件鄭州百度seo關(guān)鍵詞
  • 建站之星網(wǎng)站模板百度sem認(rèn)證
  • 坪山網(wǎng)站建設(shè)服務(wù)寧波seo關(guān)鍵詞如何優(yōu)化
  • 電子商務(wù)網(wǎng)站開(kāi)發(fā)設(shè)計(jì)報(bào)告書(shū)seo免費(fèi)入門(mén)教程
  • 河北省建設(shè)集團(tuán)有限公司網(wǎng)站百度查重免費(fèi)入口
  • 做網(wǎng)站能力介紹模板之家官網(wǎng)
  • wordpress 響應(yīng)式產(chǎn)品展示站微信營(yíng)銷(xiāo)推廣的方式有哪些
  • 寧波網(wǎng)站開(kāi)發(fā)公司湘潭關(guān)鍵詞優(yōu)化公司
  • 商務(wù)網(wǎng)站欣賞營(yíng)銷(xiāo)管理系統(tǒng)
  • 貴陽(yáng)網(wǎng)站設(shè)計(jì)焊工培訓(xùn)內(nèi)容
  • 網(wǎng)站LOGO透明底色PNG格式怎么做的最新足球賽事
  • 自己做網(wǎng)站還是用別人網(wǎng)站網(wǎng)絡(luò)做推廣公司
  • 建立網(wǎng)站的步驟 實(shí)湖南嵐鴻寧波網(wǎng)站制作與推廣價(jià)格
  • 一級(jí)a做爰片免費(fèi)網(wǎng)站冫百度熱搜電視劇
  • 亳州是網(wǎng)站建設(shè)百度seo霸屏軟件
  • 做網(wǎng)站后端要什么技術(shù)搜索引擎費(fèi)用
  • 煙臺(tái)專(zhuān)業(yè)做網(wǎng)站公司有哪些發(fā)布信息的免費(fèi)平臺(tái)
  • 建站 哪個(gè)網(wǎng)站系統(tǒng)好用四川seo整站優(yōu)化費(fèi)用
  • 成都住房和城鄉(xiāng)建設(shè)部網(wǎng)站天津疫情最新消息
  • 網(wǎng)站建設(shè)套餐是什么百度的關(guān)鍵詞優(yōu)化
  • wordpress 5.0.1編輯器seo外包多少錢(qián)
  • 十大網(wǎng)站app軟件下載網(wǎng)絡(luò)營(yíng)銷(xiāo)與策劃試題及答案
  • 做的網(wǎng)站打開(kāi)慢淮安百度推廣公司
  • 跨境電商亞馬遜seo教程之關(guān)鍵詞是什么
  • 網(wǎng)頁(yè)設(shè)計(jì)職位優(yōu)化大師下載安裝app
  • 四川華泰建設(shè)集團(tuán)網(wǎng)站免費(fèi)做網(wǎng)站網(wǎng)站