代码如下:
import cn.hutool.core.collection.CollectionUtil;
import com.alibaba.fastjson.JSONObject;
import com.google.common.collect.Lists;
import com.google.common.collect.Maps;
import lombok.Data;
import lombok.experimental.Accessors;
import org.junit.Test;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
public class Demo {
@Test
public void test01() {
List<Node> nodes = Lists.newArrayList();
Node node = new Node();
node.setId(1).setName("root").setPid(0);
nodes.add(node);
node = new Node();
node.setId(2).setName("level1-1").setPid(1);
nodes.add(node);
node = new Node();
node.setId(3).setName("level1-2").setPid(1);
nodes.add(node);
node = new Node();
node.setId(4).setName("level2-1").setPid(2);
nodes.add(node);
node = new Node();
node.setId(5).setName("level2-1").setPid(2);
nodes.add(node);
Map<Integer, List<Node>> nodeMap = nodes.stream().collect(Collectors.groupingBy(Node::getPid));
Map<Integer, Node> nodeMap2 = nodes.stream().collect(Collectors.toMap(Node::getId, x -> x));
for (Integer pid : nodeMap.keySet()) {
List<Node> nodeList = nodeMap.get(pid);
Node n = nodeMap2.get(pid);
if (n != null && CollectionUtil.isNotEmpty(nodeList)) {
n.setChildren(nodeList);
}
}
List<Node> result = nodes.stream().filter(x -> x.getPid() == 0).collect(Collectors.toList());
System.out.println(JSONObject.toJSONString(result));
}
@Data
@Accessors(chain = true)
public static class Node {
private int id;
private String name;
private int pid;
private List<Node> children;
}
}