java8中 Stream 遍歷樹形結(jié)構(gòu)

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

? ? }

]

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容