[英]Java adding ArrayList<Integer> to ArrayList<ArrayList<Integer>> replaces all elements of the ArrayList of ArrayLists
[英]Java Recursive Method ArrayList is not adding all child elements to the final ArrayList
我正在編寫一個遍歷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中,並返回到我的第一個方法。 請幫我解決這個問題。 提前致謝。
原因是您的遞歸是獲取數組的副本,並且不向原始父數組返回任何內容[按值傳遞]。
嘗試將類別列表移到函數外,並使其成為全局/靜態變量。
您可以傳遞單個(!)列表以在遞歸方法中將所有對象作為參數接收:
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 );
}
}
}
使用根節點相應地更改第一個調用:
List<KalturaCategory> subCategories = new ArrayList<KalturaCategory>();
traverse( category, subCategories );
子類別包含層次結構中所有節點的所有對象。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.