diff --git a/hutool-core/src/main/java/cn/hutool/core/lang/tree/TreeUtil.java b/hutool-core/src/main/java/cn/hutool/core/lang/tree/TreeUtil.java index 26b0160f0..6432a7360 100644 --- a/hutool-core/src/main/java/cn/hutool/core/lang/tree/TreeUtil.java +++ b/hutool-core/src/main/java/cn/hutool/core/lang/tree/TreeUtil.java @@ -134,14 +134,14 @@ public class TreeUtil { return node; } - //fix NPE - if(null == node.getChildren()) { + final List> children = node.getChildren(); + if(null == children) { return null; } // 查找子节点 Tree childNode; - for (Tree child : node.getChildren()) { + for (Tree child : children) { childNode = child.getNode(id); if (null != childNode) { return childNode; diff --git a/hutool-core/src/test/java/cn/hutool/core/lang/tree/TreeSearchTest.java b/hutool-core/src/test/java/cn/hutool/core/lang/tree/TreeSearchTest.java new file mode 100644 index 000000000..67e19ac04 --- /dev/null +++ b/hutool-core/src/test/java/cn/hutool/core/lang/tree/TreeSearchTest.java @@ -0,0 +1,37 @@ +package cn.hutool.core.lang.tree; + +import org.junit.Assert; +import org.junit.Test; + +import java.util.ArrayList; +import java.util.List; + +public class TreeSearchTest { + static List> all_menu=new ArrayList<>(); + static { + /* + * root + * /module-A + * /module-A-menu-1 + * /module-B + * /module-B-menu-1 + * /module-B-menu-2 + */ + all_menu.add(new TreeNode<>(1L, 0L, "root", 0L)); + all_menu.add(new TreeNode<>(2L,1L,"module-A",0L)); + all_menu.add(new TreeNode<>(3L,1L,"module-B",0L)); + all_menu.add(new TreeNode<>(4L,2L,"module-A-menu-1",0L)); + all_menu.add(new TreeNode<>(5L,3L,"module-B-menu-1",0L)); + all_menu.add(new TreeNode<>(6L,3L,"module-B-menu-2",0L)); + } + + @Test + public void searchNode() { + List> treeItems=TreeUtil.build(all_menu, 0L); + + Tree tree=treeItems.get(0); + Tree searchResult=tree.getNode(3L); + + Assert.assertEquals("module-B", searchResult.getName()); + } +}