//原始数据先转成树结构
private List<Organization> recursionMethodOrg(List<Organization> treeList) {
List<Organization> trees = new ArrayList<>();
for (Organization tree : treeList) {
// 找出父节点
if ("0".equals(tree.getOrgParentId())) {
// 调用递归方法填充子节点列表
trees.add(findChildrenOrg(tree, treeList));
}
}
return trees;
}
private Organization findChildrenOrg(Organization tree, List<Organization> treeList) {
for (Organization node : treeList) {
if (tree.getOrgId().equals(node.getOrgParentId())) {
if (tree.getChildren() == null) {
tree.setChildren(new ArrayList<>());
}
// 递归 调用自身
tree.getChildren().add(findChildrenOrg(node, treeList));
}
}
return tree;
}
//再通过树结构去模糊查询
private List<Organization> filterTreeByKeyWordByOrg(List<Organization> data, String keyword) {
if (CollectionUtils.isEmpty(data)) {
return data;
}
filterByOrg(data, keyword);
return data;
}
/**
* 递归方法
* @param list 任意层级的节点
* @param keyword 关键字
*/
private void filterByOrg(List<Organization> list, String keyword){
Iterator<Organization> parent = list.iterator();
while (parent.hasNext()){
//当前节点
Organization t = parent.next();
if (StrUtil.isNotEmpty(keyword) && !t.getOrgName().contains(keyword)) {
//当前节点不包含关键字,继续遍历下一级
// 取出下一级节点
List<Organization> children = t.getChildren();
// 递归
if (!CollectionUtils.isEmpty(children)) {
filterByOrg(children, keyword);
}
//下一级节点都被移除了,那么父节点也移除,因为父节点也不包含关键字
if (CollectionUtils.isEmpty(t.getChildren())) {
parent.remove();
}
} else {
//当前节点包含关键字,继续递归遍历
//子节点递归如果不包含关键字则会进入if分支被删除
List<Organization> children = t.getChildren();
// 递归
if (!CollectionUtils.isEmpty(children)) {
filterByOrg(children, keyword);
}
}
}
}
java实现 tree结构模糊搜索功能
最新推荐文章于 2024-05-06 16:04:47 发布