1.直接上代碼
public class CategoryVO {
? ? /**
? ? * id
? ? */
? ? private Integer categoryId;
? ? /**
? ? * 節(jié)點名稱
? ? */
? ? private String categoryName;
? ? /**
? ? * 父id,? 第一級父id為0
? ? */
? ? private Integer parentId;
? ? private List<CategoryVO> children = new LinkedList<>();
? ? public CategoryVO(Integer categoryId, String categoryName, Integer parentId) {
? ? ? ? this.categoryId = categoryId;
? ? ? ? this.categoryName = categoryName;
? ? ? ? this.parentId = parentId;
? ? }
? ? public static void main(String[] args) {
? ? ? ? final List<CategoryVO> categories = Arrays.asList(
? ? ? ? ? ? ? ? new CategoryVO(1, "根節(jié)點1", 0),
? ? ? ? ? ? ? ? new CategoryVO(2, "根節(jié)點2", 0),
? ? ? ? ? ? ? ? new CategoryVO(3, "根節(jié)點3", 0),
? ? ? ? ? ? ? ? new CategoryVO(4, "子節(jié)點1,4", 1),
? ? ? ? ? ? ? ? new CategoryVO(5, "子節(jié)點1,5", 1),
? ? ? ? ? ? ? ? new CategoryVO(6, "子節(jié)點2,6", 2),
? ? ? ? ? ? ? ? new CategoryVO(7, "子節(jié)點1,5,7", 5)
? ? ? ? ? ? ? ? );
? ? ? ? final Map<Integer, CategoryVO> categoryIdMap =
? ? ? ? ? ? ? ? categories.stream()
? ? ? ? ? ? ? ? ? ? ? ? .collect(Collectors
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? .toMap(CategoryVO::getCategoryId, Function.identity()));
? ? ? ? final List<CategoryVO> tree = categories.stream()
? ? ? ? ? ? ? ? .peek(category -> {
? ? ? ? ? ? ? ? ? ? final Integer parentId = category.getParentId();
? ? ? ? ? ? ? ? ? ? final CategoryVO categoryVO = categoryIdMap.get(parentId);
? ? ? ? ? ? ? ? ? ? if (Objects.nonNull(categoryVO)) {
? ? ? ? ? ? ? ? ? ? ? ? // 子節(jié)點自己去找父親, 找到了掛在父親下面, 然后取父節(jié)點就行了
? ? ? ? ? ? ? ? ? ? ? ? categoryVO.getChildren().add(category);
? ? ? ? ? ? ? ? ? ? }
? ? ? ? ? ? ? ? })
? ? ? ? ? ? ? ? .filter(category -> category.getParentId() == 0)
? ? ? ? ? ? ? ? .collect(Collectors.toList());
? ? ? ? System.out.println(JSON.toJSONString(tree));
? ? }
}
2.JSON結(jié)果打印
[
? ? {
? ? ? ? "categoryId":1,
? ? ? ? "categoryName":"根節(jié)點1",
? ? ? ? "children":[
? ? ? ? ? ? {
? ? ? ? ? ? ? ? "categoryId":4,
? ? ? ? ? ? ? ? "categoryName":"子節(jié)點1,4",
? ? ? ? ? ? ? ? "children":[
? ? ? ? ? ? ? ? ],
? ? ? ? ? ? ? ? "parentId":1
? ? ? ? ? ? },
? ? ? ? ? ? {
? ? ? ? ? ? ? ? "categoryId":5,
? ? ? ? ? ? ? ? "categoryName":"子節(jié)點1,5",
? ? ? ? ? ? ? ? "children":[
? ? ? ? ? ? ? ? ? ? {
? ? ? ? ? ? ? ? ? ? ? ? "categoryId":7,
? ? ? ? ? ? ? ? ? ? ? ? "categoryName":"子節(jié)點1,5,7",
? ? ? ? ? ? ? ? ? ? ? ? "children":[
? ? ? ? ? ? ? ? ? ? ? ? ],
? ? ? ? ? ? ? ? ? ? ? ? "parentId":5
? ? ? ? ? ? ? ? ? ? }
? ? ? ? ? ? ? ? ],
? ? ? ? ? ? ? ? "parentId":1
? ? ? ? ? ? }
? ? ? ? ],
? ? ? ? "parentId":0
? ? },
? ? {
? ? ? ? "categoryId":2,
? ? ? ? "categoryName":"根節(jié)點2",
? ? ? ? "children":[
? ? ? ? ? ? {
? ? ? ? ? ? ? ? "categoryId":6,
? ? ? ? ? ? ? ? "categoryName":"子節(jié)點2,6",
? ? ? ? ? ? ? ? "children":[
? ? ? ? ? ? ? ? ],
? ? ? ? ? ? ? ? "parentId":2
? ? ? ? ? ? }
? ? ? ? ],
? ? ? ? "parentId":0
? ? },
? ? {
? ? ? ? "categoryId":3,
? ? ? ? "categoryName":"根節(jié)點3",
? ? ? ? "children":[
? ? ? ? ],
? ? ? ? "parentId":0
? ? }
]