Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

java recursion: object is replaced rather than adding a new one

Tags:

java

I am trying to add an object inside an object using recursion. My object contains an arrayList and I am trying to add my objects to this arrayList. But instead of adding a new object, my objects are being replaced.

My code which is doing this: This is where the logic of adding an object is being done. But it is being replaced instead.

private ArrayList<SubChapters> recursiveSubChapters(ReportingTree tree, LinkedHashMap<String, HashMap<String, String>> linkedHashMap, Boolean isSubTree){
SubChapters subChapters = new Subchapters();
ArrayList<SubChapters> alchildUnits = new ArrayList<SubChapters>();
    final String chapterId = linkedHashMap.get(tree.getUnitID()).get("unit_num");       
    final String chapterName= linkedHashMap.get(tree.getUnitID()).get("unit_name");

        if (!isSubTree) {
            subChapters.set(chapterId);
            subChapters.setTreeName(chapterName);
        } 
        final ArrayList<ReportingTree> branches = tree.getBranches();
        if (branches != null) {
            subChapters.hasSubUnits(true);
            for (ReportingTree subTree: branches) {
                subChapters.setSubChapters(recursiveSubChapters(subTree, linkedHashMap, false));
//This is where the logic of adding an object is being done. But it is being replaced instead.  
            }
            alchildUnits.add(subChapters);
        } 
        return alchildUnits;
    }

My guess is that I am messing somewhere in the loop here but I am not able to figure out where I am messing up. Thanks in advance for any suggestions or help.

My subChapters class:

public String subChapterID;
public String subChapterName;
public boolean isSubTree= false;
public ArrayList<SubChapters> subChapters;

and getters and setters.

I have coded the same solution to return a string and see the order on a jsp. It works just fine. I am not able to apply the same to my issue here.

private String recursive(ReportingTree tree, LinkedHashMap<String, HashMap<String, String>> listUnitInfo, boolean isTop) {
                    final String unitID = tree.getUnitID();
                    final HashMap<String, String> unit = listUnitInfo.get(unitID);
                    String output = "";
                    if (!isTop) {
                        output += "<li><a href=\"./Display.do?unit=" + unitID + "\">" + unit.get("unit_num") + "/" + unit.get("unit_name") + "</a>";
                    }
                    final ArrayList<ReportingTree> branches = tree.getBranches();
                    if (branches != null) {
                        if (isTop) {
                            output += "<li><a href=\"./Display.do?unit=" + unitID + "\">" + unit.get("unit_num") + "/" + unit.get("unit_name") + "</a>";
                        }
                        output += "<ul>\n";
                        for (ReportingTree subTree : branches) {
                            output += recursive(subTree, listUnitInfo, false);
                        }
                        output += "</ul>";
                    } else {
                        if (isTop) {
                            output += "<li>No units match your criteria.";
                        }
                    }
                    output += "</li>\n";
                    return output;
                }
like image 388
user1041431 Avatar asked Apr 01 '26 12:04

user1041431


1 Answers

What you're doing is subChapters.setSubChapters, what I think you're trying to do is subChapters.addSubChapters.

The reason why it works with the strings is because you're using += to add the new string to the old string. Doing setSubChapters would be the same as using = with the strings.

addSubChapters would be a method that should add something to an ArrayList variable inside your subChapters class.

like image 109
Anton Avatar answered Apr 03 '26 03:04

Anton