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;
}
运行之后就会得到这样的树状结构的数据