Java – Get Next key in Linkedhashmap in java

iteratorjavalinkedhashmap

I am creating dynamic tabs.generateTab() method help to set tabs to be shown or not. Like Property to be shown, Info not to be shown, etc. But I am getting stuck in some point. I want to display Property tab. I am passing it like this:

String nextTab = getNextTab("Property");

Then it will check in getNextTab method if Property is true or not. If it is false then the method has to return the next true value.

public LinkedHashMap generateTab() {
    LinkedHashMap selectedTabs = new LinkedHashMap();
    selectedTabs.put("People", true);
    selectedTabs.put("Property", true);
    selectedTabs.put("Info", false);
    selectedTabs.put("Fixture", true);
    selectedTabs.put("Fee", true);
    selectedTabs.put("Process", true);
}

public String getNextTab(String currentTab) {

    String nextTab = null;
    Map<String, Boolean> tabList = generateTab();
    Iterator iterator = tabList.keySet().iterator();

    while (iterator.hasNext()) {
        Map.Entry entry = (Map.Entry) iterator.next();
        if (entry.getKey().equals(currentTab)) {
            if (tabList.get(entry.getKey()).equals(true)) {
                nextTab = entry.getKey().toString();
                break;
            }
        }
    }
    return nextTab;
}

can you help me to get next key which i am checked in else part?

Best Answer

There seems to be multiple problems with your code

1)public LinkedHashMap generateTab() : It should ideally return a LinkedHashMap. (I am assuming its a copy paste error)

2)iterator.next() : This should be returning a ClassCastException for casting String to Map.Entry

3)To return nextTab, you must call iterator.next() once to move the iterator to next item.

Change your getNextTab() function to look something like below.

public static String getNextTab(String currentTab) {

    String nextTab = null;
    Map<String,Boolean> tabList = generateTab();
    Iterator iterator = tabList.keySet().iterator();

    while (iterator.hasNext() ){
        String entry =(String) iterator.next();

         if(entry.equals(currentTab))
         {
             if(tabList.get(entry).equals(true))
             {

                 nextTab = entry;
                 break;
             } 
             else
             {
                nextTab =(String) iterator.next();
                break;
             }

         }

     }
     return nextTab;
}