Java教程

Java 8 中的 Stream 遍历树形结构

本文主要是介绍Java 8 中的 Stream 遍历树形结构,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
public class TreeDemo {

    public static void main(String[] args) {
        testtree();
    }


    public static void testtree() {
        //模拟从数据库查询出来
        List<Menu> menus = Arrays.asList(
                new Menu(1, "根节点", 0),
                new Menu(2, "子节点1", 1),
                new Menu(3, "子节点1.1", 2),
                new Menu(4, "子节点1.2", 2),
                new Menu(5, "根节点1.3", 2),
                new Menu(6, "根节点2", 1),
                new Menu(7, "根节点2.1", 6),
                new Menu(8, "根节点2.2", 6),
                new Menu(9, "根节点2.2.1", 7),
                new Menu(10, "根节点2.2.2", 7),
                new Menu(11, "根节点3", 1),
                new Menu(12, "根节点3.1", 11)
        );

        
        List<Menu> collect = menus.stream()
                // 获取父节点
                .filter(m -> m.getParentId() == 0)
                // 设置子节点
                .peek(m -> m.setChildList(getChildrens(m, menus)))
                .collect(Collectors.toList());

        System.out.println("-------转json输出结果-------");
        //System.out.println(collect);
        String jsonString = JSON.toJSONString(collect);
        System.out.println(jsonString);
    }


    /**
     * 递归查询子节点
     *
     * @param root 根节点
     * @param all  所有节点
     * @return 根节点信息
     */
    public static List<Menu> getChildrens(Menu root, List<Menu> all) {
        List<Menu> children = all.stream()
                .filter(m -> Objects.equals(m.getParentId(), root.getId()))
                .peek((m) -> m.setChildList(getChildrens(m, all)))
                .collect(Collectors.toList());
        return children;
    }
}


这篇关于Java 8 中的 Stream 遍历树形结构的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!