Stream流遍历实现树状结构数据

本文介绍了如何使用Java 8的Builder和Stream API创建一个递归英雄类,并展示了如何构建和查询树状结构的数据。通过实例代码演示了如何利用新特性生成英雄角色及其子节点,最终实现数据的过滤和更新。
摘要由CSDN通过智能技术生成

java8新特性

先写一个实体类

@Builder
@Data
public class Hero {

    private String id;
    private String parent_id;
    private String name;
    private String age;
    private String gender;
    private List<Hero> childrenList;

}

递归代码

private static void test1(){
    Hero hero1 = Hero.builder().id("1").name("爷爷").age("66").gender("男").parent_id("0").build();
    Hero hero2 = Hero.builder().id("2").name("鸡").age("1").gender("公鸡").parent_id("0").build();
    Hero hero3 = Hero.builder().id("3").name("李靖").age("50").gender("男").parent_id("0").build();
    Hero hero4 = Hero.builder().id("11").name("互撸娃").age("6").gender("男").parent_id("1").build();
    Hero hero5 = Hero.builder().id("22").name("菜虚鲲").age("23").gender("未知").parent_id("2").build();
    Hero hero6 = Hero.builder().id("333").name("唱").age("5").gender("未知").parent_id("22").build();
    Hero hero7 = Hero.builder().id("444").name("跳").age("5").gender("未知").parent_id("22").build();
    Hero hero8 = Hero.builder().id("555").name("rap").age("5").gender("未知").parent_id("22").build();
    Hero hero9 = Hero.builder().id("666").name("篮球").age("5").gender("未知").parent_id("22").build();
    Hero hero10 = Hero.builder().id("77").name("哪扎").age("8").gender("男").parent_id("3").build();
    Hero hero11 = Hero.builder().id("888").name("小哪吒").age("3").gender("男").parent_id("77").build();
    List<Hero> heros = new ArrayList<>();
    heros.add(hero1);
    heros.add(hero2);
    heros.add(hero3);
    heros.add(hero4);
    heros.add(hero5);
    heros.add(hero6);
    heros.add(hero7);
    heros.add(hero8);
    heros.add(hero9);
    heros.add(hero10);
    heros.add(hero11);
    System.out.println(heros);
    List<Hero> heros1 = heros.stream()
            .filter(h -> "0".equals(h.getParent_id()))
            .map((m) -> {
                m.setChildrenList(getChildrens(m, heros));
                return m;
            }
    ).collect(Collectors.toList());


    System.out.println(heros);
    System.out.println(heros1);


}

递归方法

/**
 * 递归查询子节点
 * @param hero  根节点
 * @param heroes   所有节点
 * @return 根节点信息
 */
private static List<Hero> getChildrens(Hero hero, List<Hero> heroes) {
    List<Hero> children = heroes.stream().filter(h -> {
        return Objects.equals(h.getParent_id(), hero.getId());
    }).map((h) -> {
                h.setChildrenList(getChildrens(h, heroes));
                return h;
            }).collect(Collectors.toList());
    return children;
}

在这里插入图片描述
运行之后就会得到这样的树状结构的数据

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值