java - 如何在 HashMap 中添加多个具有相同键的相同类型的对象

标签 java hashmap iteration

嗨,我认为这是一个非常简单的问题,但我现在无法解决; 有两种对象 - RuleObject,TaskObject 以下是RuleObject,TaskObject的定义

RuleObject
  ruleID,RulePatternType,RulePrint

TaskObject
  taskID,taskName,Org,ruleID

ruleArrayListRuleObjects的所有对象

taskArrayListTaskObjects的所有对象

最终的形式将获取 TaskObjects 使用的所有 RuleObjects 并按 RuleObjects 排列 就像下面的例子:

<小时/>
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
<小时/>

代码片段:

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());

                }
            }
       }

这里的问题是对于 1 个规则 ID,有多个数组列表,因此我能够获取最后添加的列表。 任何人都可以为此提出更好的替代方案吗?

最佳答案

我并没有真正遵循您的示例,但听起来您需要的是多重映射 - 从单个键到多个值的映射。

Guava提供interface对于此和各种实现,通常通过 Multimaps 访问.

关于java - 如何在 HashMap 中添加多个具有相同键的相同类型的对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7401732/

相关文章:

java - 使用 JNA 将 const char** 映射到 Java 类型

python - python是匀速迭代的吗?

java - 为什么变量声明为Map,初始化为HashMap;它们不是不同的类型吗?

java - Person 不能转换为 HashMap<String, Person>

java - 递归堆栈不保存 HashMap 中的更改

algorithm - 树遍历的迭代方法

python - 根据数据帧中的条件消除重复项

java - 用空数据拆分字符串

java - Java 中的 KnockKnockServer

Java自定义列表到字符串数组