溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

java樹結(jié)構(gòu)stream工具類怎么用

發(fā)布時間:2022-03-18 09:04:33 來源:億速云 閱讀:246 作者:iii 欄目:開發(fā)技術(shù)

本文小編為大家詳細介紹“java樹結(jié)構(gòu)stream工具類怎么用”,內(nèi)容詳細,步驟清晰,細節(jié)處理妥當,希望這篇“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());
}

讀到這里,這篇“java樹結(jié)構(gòu)stream工具類怎么用”文章已經(jīng)介紹完畢,想要掌握這篇文章的知識點還需要大家自己動手實踐使用過才能領會,如果想了解更多相關(guān)內(nèi)容的文章,歡迎關(guān)注億速云行業(yè)資訊頻道。

向AI問一下細節(jié)

免責聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI