java 递归 层级_基于java8实现层级关系嵌套-递归

import lombok.Data;

import lombok.experimental.Accessors;

import java.util.List;

/**

* @author :zhangyang

* @version :1.0

* @description:

* @date :Created in 2020/6/10 9:54

* @modified By:

*/

@Data

@Accessors(chain = true)

public class DemoClass {

private String id;

private String name;

private String pid;

private Listchildren;

}

import com.google.common.collect.Lists;

import com.google.common.collect.Maps;

import lombok.AllArgsConstructor;

import java.util.List;

import java.util.Map;

/**

* @author :zhangyang

* @version :1.0

* @description:递归

* @date :Created in 2020/6/10 11:11

* @modified By:

*/

@AllArgsConstructor

public class DiGui {

/**

* 父节点

*/

private Listroot;

/**

* 所有节点(或不包含父节点)

*/

private Listbody;

public ListreturnList() {

if (body != null && !body.isEmpty()) {

Mapmap = Maps.newHashMapWithExpectedSize(body.size());

root.forEach(entity -> getChildren(entity, map));

return root;

}

return null;

}

public void getChildren(DemoClass demoClass, Mapmap) {

Listchildren = Lists.newArrayList();

body.stream()

.filter(entity -> !map.containsKey(entity.getId()))

.filter(entity -> entity.getPid().equals(demoClass.getId()))

.forEach(entity -> {

map.put(entity.getId(), entity.getPid());

getChildren(entity, map);

children.add(entity);

});

demoClass.setChildren(children);

}

}

import com.alibaba.fastjson.JSONObject;

import com.google.common.collect.Lists;

import lombok.extern.slf4j.Slf4j;

import java.util.List;

/**

* @author :zhangyang

* @version :1.0

* @description:

* @date :Created in 2020/6/10 9:53

* @modified By:

*/

@Slf4j

public class Demo {

public static void main(String[] args) {

Listroot = Lists.newArrayList(

new DemoClass().setId("1").setName("1").setPid("0"),

new DemoClass().setId("2").setName("2").setPid("0"),

new DemoClass().setId("3").setName("3").setPid("0"),

new DemoClass().setId("4").setName("4").setPid("0")

);

Listbody = Lists.newArrayList(

new DemoClass().setId("1").setName("1").setPid("0"),

new DemoClass().setId("2").setName("2").setPid("0"),

new DemoClass().setId("3").setName("3").setPid("0"),

new DemoClass().setId("4").setName("4").setPid("0"),

new DemoClass().setId("11").setName("1>1").setPid("1"),

new DemoClass().setId("12").setName("1>2").setPid("1"),

new DemoClass().setId("21").setName("2>1").setPid("2"),

new DemoClass().setId("31").setName("3>1").setPid("3")

);

DiGui digui = new DiGui(root,body);

Listlist = digui.returnList();

log.info("JSON"+JSONObject.toJSON(list));

}

}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值