我正在编写一个遍历Java对象层次结构的递归方法。为此,我编写了一个递归方法,它将根节点(父节点)作为参数。这是调用递归方法遍历的基本方法:
if (category.id == GALLERIE_ID_TEST) {
traverse(category);
System.out.println("children ...." + subCategories);
}
在遍历方法中,我编写了一个遍历父节点的所有子节点的逻辑。但是当我将所有子对象添加到ArrayList时,所有子对象都没有被添加到此方法的最终列表中。它仅返回父节点的子计数,但我也需要获得后续节点的所有子节点。
我的代码在这里:
private static void traverse(KalturaCategory category)
throws KalturaApiException {
List<KalturaCategory> subCategories = new ArrayList<KalturaCategory>();
KalturaCategoryListResponse categoriesList = null;
if (category != null && category.directSubCategoriesCount >= 1) {
KalturaCategoryFilter filter = new KalturaCategoryFilter();
filter.parentIdEqual = category.id;
categoriesList = getCategoriesList(filter);
if (categoriesList.totalCount != 0) {
for (KalturaCategory subCat : categoriesList.objects) {
traverse(subCat);
subCategories.add(subCat);
}
}
System.out.println("subCategories Size ------>"
+ subCategories.size());
}
}
我的输出是:
subCategories Size ------>3
subCategories Size ------>4
subCategories Size ------>5
subCategories Size ------>5
subCategories Size ------>1
subCategories Size ------>6
children ....[]
但是我希望将所有这些单独的子对象都放到一个ArrayList中并返回到我的第一个方法。请帮我解决这个问题。提前谢谢。
答案 0 :(得分:0)
原因是你的递归是获取数组的副本并且不返回原始父数组[按值传递]。
尝试将类别列表移到函数外部,并使其成为全局/静态变量。
答案 1 :(得分:0)
您可以传递单个(!)列表以接收所有对象作为递归方法中的参数:
<div id="sidr">
<ul>
<li>@Html.ActionLink("Home", "Index", "Home")</li>
</ul>
</div>
<a id="slide" href="#sidr">Reveal Menu</button>
使用根节点相应地更改第一个呼叫:
private static void traverse(KalturaCategory category,
List<KalturaCategory> subCategories )
throws KalturaApiException {
if (category != null && category.directSubCategoriesCount >= 1) {
KalturaCategoryFilter filter = new KalturaCategoryFilter();
filter.parentIdEqual = category.id;
KalturaCategoryListResponse categoriesList =
getCategoriesList(filter);
if( categoriesList.totalCount != 0) {
for (KalturaCategory subCat : categoriesList.objects) {
traverse(subCat, subCategories);
}
subCategories.addAll( categoriesList.objects );
}
}
}
和subCateogories包含层次结构中所有节点的所有对象。