当前位置: 首页 > 知识库问答 >
问题:

类别/子类别:如何获取给定类别的所有子类别(它们的子类别也是)?

何兴学
2023-03-14

有一个类别,具有以下(重要)属性:

public class Category{
   private Integer id;
   private String name;
   private Category parentCategory;
   private Set<Category> subcategories = new HashSet<Category>();
   ...
   //getters and setters
}

我正在尝试实现类别/子类别的概念。一个类别可以有零个或多个子类别。一个类别只能有一个父类别(可以为null)。对于顶级类别,parentCategory=null。

现在,我有一个所有类别的列表,List

如果我有一些类别(或categoryId)和所有类别,如何获得给定类别的所有子类别(及其子类别)的列表?使用哪个循环?(可以限制为子类别深度级别3)


共有2个答案

单于海荣
2023-03-14

可以使用查询在数据库级别获取类别树。如果您的类别类是JPA实体,则可以使用如下查询:

SELECT c1
FROM Category c1 JOIN c1.subcategories c2 JOIN c2.subcategories c3
WHERE c1.id = :categoryId

这将获取具有给定categoryId根的类别树。现在,如果您想创建树的平面结构(列表或集合),可以使用DFS或BFS算法http://en.wikipedia.org/wiki/Tree_traversal.

暨鹭洋
2023-03-14

这里有一些伪代码,如果您想要更具体的解决方案,请提供ResultSet详细信息。

for(all result set) {
    currentCategoriesFromDb = current category;
    currentCategoriesFromDb.setParentCategory() = parentCategoryId;
    parentCategory.addCategory(currentCategoriesFromDb )
}

如果所有类别层次结构都已初始化并且您想导航,您可以执行以下操作:

currentCategory.getChildByName(name1).getChildByName(name2);

如果您希望递归地精确计算所有内容:

printbCategories(Category category) {
    print(category);
    List<Category> subCategories = category.getSubCategories();
    for(Category category : subCategories ) {
        printbCategories(category);  
    }
}
 类似资料:
  • 我目前有一个代码片段,其中对于每个类别,它将找到子类别: 将递归获取一个类别的子级: 目前,使用,只检索子类别的子类别,因此如果每个子类别都有自己的子类别,则不会将其保存到子类别中。 我如何显示子子类别给我们的子类别? 我想用我的代码做的是获取一个父级,获取它的子级,然后将这些子级中的每一个视为父级,递归地获取它的子级,但是我的JSON输出并没有反映这一点。只有父对象有子对象-子对象没有子对象(尽

  • 我想在前端获得所有woocommerce类别的子类别,结果如下: 这是我所拥有的(但不是我想要的): 这段代码显示了类别和子类别,但是子类别不在应该在的地方,子类别就像这样的单独链接:

  • 我在从mysql数据库检索子类别时遇到一些问题。我想显示父类别的子类别。我只能得到主类别的最后一个子类别。第一个子类别不显示**。在我的表**中,我有类别\u id和类别\u父\u id。其中类别\u父\u id对于父类别将为“0”。提前谢谢 当我删除

  • 我正试图通过WoodPress主题中的一个函数从woocommerce获取产品类别,我已经做到了: 这将按层次列出所有顶级类别及其下的子类别,但我有子类别(子类别)的子类别,因此如何列出这些子类别。

  • 我已经为产品创建了一些自定义类别,它有子类别,子类别还有更多的子类别。现在我首先显示主要类别。如果我在那里显示子类别,那么将显示与该类别及其子类别相关的所有子类别。我想一步一步地向他们展示。也就是说,如果用户单击主类别,则会转到其子类别页面。如果用户单击其子类别之一,则应转到子类别,如果没有子类别,则显示产品。这是什么代码 它覆盖了以前的排序顺序。也就是说,如果从仪表板中,我们按排序顺序给出2到3

  • 我发现了一个WooCommerce代码片段,它在分类页面上添加了排序功能,并且可以正常工作。 但问题是排序子类别仅显示在父类别页面上,而不显示在子类别页面中。 为了实现这一点,我需要在代码中修改什么? 这是我的密码: 参考:在单独的列表中显示商业类别、子类别和产品