java樹結(jié)構(gòu)stream工具類的示例代碼詳解
菜單實(shí)體類
package com.example.demo.entity; import lombok.AllArgsConstructor; import lombok.Builder; import lombok.Data; import lombok.NoArgsConstructor; import java.util.List; @Data @Builder @AllArgsConstructor @NoArgsConstructor public class Menu { /** * id */ public Integer id; * 名稱 public String name; * 父id ,根節(jié)點(diǎn)為0 public Integer parentId; * 子節(jié)點(diǎn)信息 public List<Menu> childList; public Menu(Integer id, String name, Integer parentId) { this.id = id; this.name = name; this.parentId = parentId; } }
生成樹結(jié)構(gòu)工具類
package com.example.demo.util; import cn.hutool.json.JSONUtil; import com.example.demo.entity.Menu; import java.util.Arrays; import java.util.List; import java.util.Objects; import java.util.stream.Collectors; public class TreeUtil { /** * 遞歸查詢子節(jié)點(diǎn) * * @param root 根節(jié)點(diǎn) * @param all 所有節(jié)點(diǎn) * @return 根節(jié)點(diǎn)信息 */ public static List<Menu> getChildrens(Menu root, List<Menu> all) { List<Menu> 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; } * @param parentId 父節(jié)點(diǎn)id * @param menus 菜單集合 * @return 返回id等于parentId的子孫節(jié)點(diǎn)樹結(jié)構(gòu) (不包含id等于parentId的節(jié)點(diǎn)) public static List<Menu> getTree(Integer parentId, List<Menu> menus) { //獲取父節(jié)點(diǎn) List<Menu> tree = menus.stream().filter(m -> Objects.equals(parentId,m.getParentId())).map( m.setChildList(getChildrens(m, menus)); return tree; public static void main(String... args) { //模擬從數(shù)據(jù)庫查詢出來 List<Menu> menus = Arrays.asList( new Menu(1, "0-1", 0), new Menu(2, "0-1-2", 1), new Menu(3, "0-1-2-3", 2), new Menu(4, "0-1-2-4", 2), new Menu(5, "0-1-2-5", 2), new Menu(6, "0-6", 0), new Menu(7, "0-6-7", 6), new Menu(8, "0-6-8", 6), new Menu(9, "0-6-7-9", 7), new Menu(10, "0-6-7-10", 7), new Menu(11, "0-11", 0), new Menu(12, "0-11-12", 11) ); List<Menu> tree = getTree(1,menus); System.out.println("-------轉(zhuǎn)json輸出結(jié)果-------"); System.out.println(JSONUtil.parseArray(tree).toString()); }
到此這篇關(guān)于java樹結(jié)構(gòu)stream工具類的文章就介紹到這了,更多相關(guān)java樹結(jié)構(gòu)工具類內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- 詳解Java構(gòu)建樹結(jié)構(gòu)的公共方法
- Java實(shí)現(xiàn)遞歸查詢樹結(jié)構(gòu)的示例代碼
- java合成模式之神奇的樹結(jié)構(gòu)
- JAVA使用hutool工具實(shí)現(xiàn)查詢樹結(jié)構(gòu)數(shù)據(jù)(省市區(qū))
- JAVA如何轉(zhuǎn)換樹結(jié)構(gòu)數(shù)據(jù)代碼實(shí)例
- JAVA后臺轉(zhuǎn)換成樹結(jié)構(gòu)數(shù)據(jù)返回給前端的實(shí)現(xiàn)方法
- Java實(shí)現(xiàn)簡單樹結(jié)構(gòu)
- java后端操作樹結(jié)構(gòu)的案例代碼
相關(guān)文章
Java編程中的性能優(yōu)化如何實(shí)現(xiàn)
這篇文章主要介紹了Java編程中的性能優(yōu)化如何實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2019-10-10idea自帶Jacoco/idea自動(dòng)測試語句覆蓋率方法(使用詳解)
這篇文章主要介紹了idea自帶Jacoco/idea自動(dòng)測試語句覆蓋率方法,本文給大家分享使用方法,通過圖文實(shí)例相結(jié)合給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2021-04-04MybatisPlus中@TableField注解的使用詳解
這篇文章主要介紹了MybatisPlus中@TableField注解的使用詳解,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-09-09設(shè)計(jì)模式之原型模式_動(dòng)力節(jié)點(diǎn)Java學(xué)院整理
這篇文章主要介紹了設(shè)計(jì)模式之原型模式,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2017-08-08spring+hibernate 兩種整合方式配置文件的方法
本篇文章主要介紹了spring+hibernate 兩種整合方式配置文件的方法,主要有兩種方式 1、注解方式 2、xml方式實(shí)現(xiàn),有興趣的可以了解一下。2017-04-04Java實(shí)現(xiàn)圖片轉(zhuǎn)base64完整代碼示例
這篇文章主要給大家介紹了關(guān)于Java實(shí)現(xiàn)圖片轉(zhuǎn)base64的相關(guān)資料,Base64是網(wǎng)絡(luò)上最常見的用于傳輸8Bit字節(jié)碼的編碼方式之一,Base64就是一種基于64個(gè)可打印字符來表示二進(jìn)制數(shù)據(jù)的方法,需要的朋友可以參考下2023-12-12