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后臺(tái)轉(zhuǎn)換成樹結(jié)構(gòu)數(shù)據(jù)返回給前端的實(shí)現(xiàn)方法
- Java實(shí)現(xiàn)簡單樹結(jié)構(gòu)
- java后端操作樹結(jié)構(gòu)的案例代碼
相關(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é)合實(shí)例代碼給大家介紹的非常詳細(xì),需要的朋友參考下吧2023-10-10
Spring中@Autowired自動(dòng)注入map詳解
這篇文章主要介紹了Spring中@Autowired自動(dòng)注入map詳解, spring是支持基于接口實(shí)現(xiàn)類的直接注入的,支持注入map,list等集合中,不用做其他的配置,直接注入,需要的朋友可以參考下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框架實(shí)現(xiàn)多表關(guān)系查詢功能
這篇文章主要介紹了java mybatis框架實(shí)現(xiàn)多表關(guān)系查詢,基于Maven框架的整體設(shè)計(jì) —— 一多一的關(guān)系,文中通過實(shí)例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2021-10-10
Java并發(fā)之synchronized實(shí)現(xiàn)原理深入理解
這篇文章主要介紹了Java中synchronized實(shí)現(xiàn)原理詳解,涉及synchronized實(shí)現(xiàn)同步的基礎(chǔ),Java對象頭,Monitor,Mark Word,鎖優(yōu)化,自旋鎖等相關(guān)內(nèi)容,具有一定借鑒價(jià)值,需要的朋友可以參考下2021-08-08
自定義spring mvc的json視圖實(shí)現(xiàn)思路解析
這篇文章主要介紹了自定義spring mvc的json視圖的實(shí)現(xiàn)思路解析,本文給大家介紹的非常詳細(xì),具有參考借鑒價(jià)值,需要的朋友可以參考下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

