代码
import com.alibaba.fastjson.JSONArray;
import lombok.AllArgsConstructor;
import lombok.Data;
import java.util.ArrayList;
import java.util.List;
import java.util.Objects;
import java.util.stream.Collectors;
public class Test {
public static void main(String[] args) {
Test test = new Test();
List<TreeEntity> list = test.init();
List<TreeEntity> tree = test.selectTree(list);
System.out.println(JSONArray.toJSON(tree));
}
private List<TreeEntity> init() {
List<TreeEntity> list = new ArrayList<>();
list.add(new TreeEntity(1, "1-1", 0, null));
list.add(new TreeEntity(2, "1-2", 0, null));
list.add(new TreeEntity(3, "1-1-1", 1, null));
list.add(new TreeEntity(4, "1-1-2", 1, null));
list.add(new TreeEntity(5, "1-2-1", 2, null));
list.add(new TreeEntity(6, "1-1-1-1", 3, null));
list.add(new TreeEntity(7, "1-1-1-2", 3, null));
list.add(new TreeEntity(8, "1-2-1-1", 5, null));
list.add(new TreeEntity(9, "1-2-1-2", 5, null));
list.add(new TreeEntity(10, "1-1-2-1", 4, null));
list.add(new TreeEntity(11, "1-1-2-2", 4, null));
return list;
}
public List<TreeEntity> selectTree(List<TreeEntity> list) {
return list.stream().filter(entity -> entity.getPid() == 0)
.peek(entity -> entity.setChildNodeList(getChildNode(entity, list))).collect(Collectors.toList());
}
private List<TreeEntity> getChildNode(TreeEntity root, List<TreeEntity> allListTree) {
return allListTree.stream().filter(entity -> Objects.equals(entity.getPid(), root.getId()))
.peek(entity -> entity.setChildNodeList(getChildNode(entity, allListTree))).collect(Collectors.toList());
}
@Data
@AllArgsConstructor
class TreeEntity {
private Integer id;
private String name;
private Integer pid;
private List<TreeEntity> childNodeList;
}
}
结果
[
{
"name": "1-1",
"pid": 0,
"id": 1,
"childNodeList": [
{
"name": "1-1-1",
"pid": 1,
"id": 3,
"childNodeList": [
{
"name": "1-1-1-1",
"pid": 3,
"id": 6,
"childNodeList": []
},
{
"name": "1-1-1-2",
"pid": 3,
"id": 7,
"childNodeList": []
}
]
},
{
"name": "1-1-2",
"pid": 1,
"id": 4,
"childNodeList": [
{
"name": "1-1-2-1",
"pid": 4,
"id": 10,
"childNodeList": []
},
{
"name": "1-1-2-2",
"pid": 4,
"id": 11,
"childNodeList": []
}
]
}
]
},
{
"name": "1-2",
"pid": 0,
"id": 2,
"childNodeList": [
{
"name": "1-2-1",
"pid": 2,
"id": 5,
"childNodeList": [
{
"name": "1-2-1-1",
"pid": 5,
"id": 8,
"childNodeList": []
},
{
"name": "1-2-1-2",
"pid": 5,
"id": 9,
"childNodeList": []
}
]
}
]
}
]
原文链接