Reputation: 3036
Hi I think this is very simple problem but I am not able to get through it right now;
There are two kinds of Objects-RuleObject,TaskObject
Following are definitions of RuleObject,TaskObject
RuleObject
ruleID,RulePatternType,RulePrint
TaskObject
taskID,taskName,Org,ruleID
ruleArrayList
is all objects of RuleObjects
taskArrayList
is all objects of TaskObjects
The final formation will be to fetch all RuleObjects
used by TaskObjects
and arrange by RuleObjects
like example shown below:
RuleObject.RulePatternType1
TaskName1 TaskOrg1 RUleObject.rulePrint1
TaskName2 TaskOrg2 RuleObject.rulePrint1
RuleObject.RulePatternType2
TaskName3 TaskOrg1 RUleObject.rulePrint2
TaskName4 TaskOrg2 RuleObject.rulePrint2
TaskName5 TaskOrg3 RUleObject.rulePrint2
TaskName6 TaskOrg4 RuleObject.rulePrint2
Code snippet:
List<TaskObject> taskArrayList = compModIF.getRecurringTasksForOrgsAndEffDate(allOrgIds, effDate);
List<RuleObject> ruleArrayList = compModIF.getComplianceTaskRecurrenceRules();
Map ruleTypes = new HashMap();
Map groupTaskTypes = new HashMap();
Map groupRecurRulesNames = new HashMap();
Map masterMapOfallMaps = new HashMap();
Map recurPrintMap = new HashMap();
Map recurPatternTypeMap = new HashMap();
List groupRecuringTaskTypesList = null;
Map filterRules = new HashMap();
List completedList = new ArrayList();
for(Iterator iter = ruleArrayList .iterator(); iter.hasNext();)
{
RuleObject ruleBase = (RuleObject)iter.next();
ruleTypes.put(ruleBase.getRecurRuleID(),ruleBase);
}
if (recurringTaskList != null)
{
for (Iterator it = taskArrayList .iterator(); it.hasNext();)
{
TaskObject aTaskDef = (TaskObject)it.next();
groupRecuringTaskTypesList = new ArrayList();
if(ruleTypes.containsKey(aTaskDef.getTaskRecurRuleIDAsLong()))
{
RuleObject ruleBase = (RuleObject)ruleTypes.get(aTaskDef.getTaskRecurRuleIDAsLong());
groupRecuringTaskTypesList.add(aTaskDef);
groupTaskTypes.put(ruleBase.getRecurRuleID(),groupRecuringTaskTypesList);
groupRecurRulesNames.put(ruleBase.getRecurRuleID(), ruleBase.getRecurRuleName());
if(ruleBase.getRecurPatternType()==ComplianceCodes.TASK_RECUR_PATTERN_TYPE_DAILY)
{
completedList= getDailyRecursCommentsAsCompleted(ruleBase.printRule());
recurPrintMap.put(ruleBase.getRecurRuleID(), completedList);
}
//groupRecuringTaskTypes = new ArrayList();
recurPatternTypeMap.put(ruleBase.getRecurRuleID(), ruleBase.getRecurPatternType());
}
}
}
The problem here is for 1 ruleID there are multiple arraylists because of which I am able to get the last added list. Can any one suggest better alternative for this.
Upvotes: 0
Views: 636
Reputation: 1584
You can attain it simply by using Object as the value. and define the Map as shown below.
Map map = new HashMap()
Then when u set an ordinary object without multiple value
set for the key and value as any valueObject
map.put("key", valueObject)
when you want to add more than one, you can check for exiting key map.containsKey("key")
and then add it to an arraylist and add remaining values into this list map.put("key", valueObjectList)
.
Note: just make sure that when u retrive it next time, do a instanceof
check before you access the value as an object or list.
Alternate soln: store value as a list of object. it is simpler to code.
Upvotes: 0
Reputation: 114767
You have to store a Collection for each key:
Map<KeyType, Collection<ValueType>> map =
new HashMap<KeyType, Collection<ValueType>>()
Upvotes: 2