获取父分类下所有子类(递归)

/**
* for shanshan
* @param depId
* @return
*/
public List sonDepsHelei(Long depId){
//查询所有部门
List list = deptRepository.findAll();
//1 List 需要有范型
List allChildIdList = Lists.newArrayList();
//2 需要把 结果的list ,当作参数传递到方法里,你之前的写法,只能返回第一层的数据,做不到递归
getChildIdHelei(allChildIdList,depId,list);
allChildIdList.add(depId);
return allChildIdList;

}

public void getChildIdHelei(List<Long> rs,Long parentId,List<DeptDO> deptList){
    for(DeptDO depdo:deptList){
        if(depdo.getParentId().equals(parentId)){
            rs.add(depdo.getDeptId());
            getChildIdHelei(rs,depdo.getDeptId(), deptList);
        }
    }

}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 可以通过递归的方式来获取当前分类下的分类,具体实现如下: ```java public List<Category> getSubCategories(Category category) { List<Category> subCategories = new ArrayList<>(); for (Category subCategory : category.getSubCategories()) { subCategories.add(subCategory); subCategories.addAll(getSubCategories(subCategory)); } return subCategories; } ``` 其中,Category表示分类对象,getSubCategories()方法获取当前分类分类列表。通过循环遍历分类,将其添加到结果列表中,并递归调用getSubCategories()方法获取分类,最终返回所有分类的列表。 ### 回答2: 在Java中,可以使用递归获取当前分类下的分类。首先,需要定义一个方法来实现递归的逻辑。 方法的输入参数为当前分类的ID,通过这个ID可以获取分类下的所有分类。首先,需要查询数据库或其他数据源,获取当前分类的所有分类的ID列表。 然后,对于每个分类的ID,再次调用递归方法,将该分类的ID作为参数传入。递归方法会继续查询这个分类的所有分类的ID列表,并继续调用递归方法,直到所有分类的ID被获取完毕。 最后,递归方法会返回所有分类的ID列表。 以下是一个递归方法的示例代码: ``` public List<Integer> getAllSubcategories(int categoryId) { List<Integer> allSubcategories = new ArrayList<>(); // 查询当前分类下的所有分类的ID列表 List<Integer> subcategoryIds = getCategoryIdsByParentId(categoryId); // 对于每个分类的ID,递归调用获取所有分类的ID列表 for (int subcategoryId : subcategoryIds) { List<Integer> subcategories = getAllSubcategories(subcategoryId); allSubcategories.addAll(subcategories); } // 将当前分类下的所有分类的ID列表添加到结果中 allSubcategories.addAll(subcategoryIds); return allSubcategories; } private List<Integer> getCategoryIdsByParentId(int parentId) { // 查询数据库或其他数据源,根据分类ID获取分类的ID列表 // 这里使用一个简化的示例,直接返回预定义的分类ID列表 List<Integer> subcategories = new ArrayList<>(); if (parentId == 1) { subcategories.add(2); subcategories.add(3); } else if (parentId == 2) { subcategories.add(4); subcategories.add(5); } else if (parentId == 3) { subcategories.add(6); subcategories.add(7); } return subcategories; } ``` 使用该方法,可以递归获取给定分类下的所有分类的ID列表。 ### 回答3: 要实现Java递归获取当前分类下的分类,可以采用以下方法: 1. 首先,创建一个Category类,该类包含一个名称属性和一个分类列表(List<Category>)属性。 2. 在Category类中,定义一个方法getChildCategories(),用于递归获取当前分类下的分类。 3. 在getChildCategories()方法中,首先获取当前分类分类列表。然后,遍历该列表,对于每个分类递归调用getChildCategories()方法获取分类,并将返回的结果添加到一个新的分类列表中。 4. 最后,返回这个新的分类列表。 下面是一个示例代码: ``` import java.util.ArrayList; import java.util.List; public class Category { private String name; private List<Category> childCategories; public Category(String name) { this.name = name; this.childCategories = new ArrayList<>(); } public void addChildCategory(Category childCategory) { this.childCategories.add(childCategory); } public List<Category> getChildCategories() { List<Category> allChildCategories = new ArrayList<>(); for (Category child : childCategories) { allChildCategories.addAll(child.getChildCategories()); } return allChildCategories; } public static void main(String[] args) { // 创建分类 Category rootCategory = new Category("Root"); Category category1 = new Category("Category 1"); Category category2 = new Category("Category 2"); Category subcategory1 = new Category("Subcategory 1"); Category subcategory2 = new Category("Subcategory 2"); // 构建分类的层次结构 rootCategory.addChildCategory(category1); rootCategory.addChildCategory(category2); category1.addChildCategory(subcategory1); category2.addChildCategory(subcategory2); // 获取当前分类下的所有分类 List<Category> allChildCategories = rootCategory.getChildCategories(); System.out.println("当前分类下的分类:"); for (Category category : allChildCategories) { System.out.println(category.name); } } } ``` 运行以上代码,将输出以下内容: ``` 当前分类下的分类: Category 1 Subcategory 1 Category 2 Subcategory 2 ``` 以上就是用Java递归获取当前分类下的分类的示例代码和解释。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值