java樹結(jié)構(gòu)stream工具類的示例代碼詳解
菜單實體類
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é)點為0
public Integer parentId;
* 子節(jié)點信息
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é)點
*
* @param root 根節(jié)點
* @param all 所有節(jié)點
* @return 根節(jié)點信息
*/
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é)點id
* @param menus 菜單集合
* @return 返回id等于parentId的子孫節(jié)點樹結(jié)構(gòu) (不包含id等于parentId的節(jié)點)
public static List<Menu> getTree(Integer parentId, List<Menu> menus) {
//獲取父節(jié)點
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)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Swagger3.0 整合spring boot2.7x避免swagger2.0與boot2.7沖突
這篇文章主要介紹了Swagger3.0 整合spring boot2.7x避免swagger2.0與boot2.7沖突問題,通過注釋掉2.0引入的倆包,直接引入3.0,文中結(jié)合實例代碼給大家介紹的非常詳細(xì),需要的朋友參考下吧2023-10-10
SpringBoot生成jar/war包的布局應(yīng)用
在 Spring Boot 中,"布局應(yīng)用"(Application Layout)指的是打包生成的可執(zhí)行 jar 或 war 文件中的內(nèi)容組織結(jié)構(gòu),本文給大家介紹了SpringBoot生成jar/war包的布局應(yīng)用,需要的朋友可以參考下2024-02-02
java mybatis框架實現(xiàn)多表關(guān)系查詢功能
這篇文章主要介紹了java mybatis框架實現(xiàn)多表關(guān)系查詢,基于Maven框架的整體設(shè)計 —— 一多一的關(guān)系,文中通過實例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2021-10-10
Java并發(fā)之synchronized實現(xiàn)原理深入理解
這篇文章主要介紹了Java中synchronized實現(xiàn)原理詳解,涉及synchronized實現(xiàn)同步的基礎(chǔ),Java對象頭,Monitor,Mark Word,鎖優(yōu)化,自旋鎖等相關(guān)內(nèi)容,具有一定借鑒價值,需要的朋友可以參考下2021-08-08
自定義spring mvc的json視圖實現(xiàn)思路解析
這篇文章主要介紹了自定義spring mvc的json視圖的實現(xiàn)思路解析,本文給大家介紹的非常詳細(xì),具有參考借鑒價值,需要的朋友可以參考下2017-12-12
利用JavaFX工具構(gòu)建Reactive系統(tǒng)
這篇文章主要介紹了使用JavaFX構(gòu)建Reactive系統(tǒng),利用JavaFX工具集中的新的超棒特性來構(gòu)建響應(yīng)式的快速應(yīng)用程序,感興趣的小伙伴們可以參考一下2016-02-02

