欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

java樹結(jié)構(gòu)stream工具類的示例代碼詳解

 更新時(shí)間:2022年03月17日 16:48:15   作者:非ban必選  
Stream 作為 Java 8 的一大亮點(diǎn),它與 java.io 包里的 InputStream 和 OutputStream 是完全不同的概念。今天通過本文重點(diǎn)給大家介紹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)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Java編程中的性能優(yōu)化如何實(shí)現(xiàn)

    Java編程中的性能優(yōu)化如何實(shí)現(xiàn)

    這篇文章主要介紹了Java編程中的性能優(yōu)化如何實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-10-10
  • SpringBoot整合ES解析搜索返回字段問題

    SpringBoot整合ES解析搜索返回字段問題

    這篇文章主要介紹了SpringBoot整合ES解析搜索返回字段問題,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2023-03-03
  • 淺談Java基礎(chǔ)知識之BigDecimal

    淺談Java基礎(chǔ)知識之BigDecimal

    我們又來回顧Java基礎(chǔ)知識啦,今天講的是BigDecimal的基本使用以及異常處理,下文中有非常詳細(xì)的代碼示例以及注釋哦,需要的朋友可以參考下
    2021-05-05
  • idea自帶Jacoco/idea自動(dòng)測試語句覆蓋率方法(使用詳解)

    idea自帶Jacoco/idea自動(dòng)測試語句覆蓋率方法(使用詳解)

    這篇文章主要介紹了idea自帶Jacoco/idea自動(dòng)測試語句覆蓋率方法,本文給大家分享使用方法,通過圖文實(shí)例相結(jié)合給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2021-04-04
  • java Thumbnails 圖片處理的使用

    java Thumbnails 圖片處理的使用

    這篇文章主要介紹了java Thumbnails 圖片處理的使用,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-03-03
  • MybatisPlus中@TableField注解的使用詳解

    MybatisPlus中@TableField注解的使用詳解

    這篇文章主要介紹了MybatisPlus中@TableField注解的使用詳解,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-09-09
  • Java的繪圖模式使用淺析

    Java的繪圖模式使用淺析

    這篇文章主要介紹了Java的繪圖模式使用淺析,以一個(gè)小例子大概列舉了XOR模式下能干的一些事情,需要的朋友可以參考下
    2015-10-10
  • 設(shè)計(jì)模式之原型模式_動(dòng)力節(jié)點(diǎn)Java學(xué)院整理

    設(shè)計(jì)模式之原型模式_動(dòng)力節(jié)點(diǎn)Java學(xué)院整理

    這篇文章主要介紹了設(shè)計(jì)模式之原型模式,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2017-08-08
  • spring+hibernate 兩種整合方式配置文件的方法

    spring+hibernate 兩種整合方式配置文件的方法

    本篇文章主要介紹了spring+hibernate 兩種整合方式配置文件的方法,主要有兩種方式 1、注解方式 2、xml方式實(shí)現(xiàn),有興趣的可以了解一下。
    2017-04-04
  • Java實(shí)現(xiàn)圖片轉(zhuǎn)base64完整代碼示例

    Java實(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

最新評論