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