【问题标题】:Nested Map issue: While clearing the inner map, the outside Map value is also clearing嵌套地图问题:在清除内部地图的同时,外部地图值也在清除
【发布时间】:2017-06-10 11:27:59
【问题描述】:

在这里,我正在收集内部地图中的一些数据以及用户 ID,并将其放入外部地图。然后 Inner Map 正在清除和填充另一组数据,并为用户数量循环。 问题是在清除 InnerMap 的同时,放入外部地图的 Value 也在清除。我想我做错了。请多多指教。

HashMap<MDocumentNumber, Integer> innerMap = new HashMap<MDocumentNumber, Integer>();
            HashMap<Integer, HashMap<MDocumentNumber, Integer>> outerMap = new HashMap<Integer, HashMap<MDocumentNumber, Integer>>();
            List<MDocumentNumber> docNumbers = new Query(getCtx(), MDocumentNumber.Table_Name, "IsActive = 'Y'", get_TrxName())
                                                .setOrderBy("CreatedBy").list();        
            int createdBy = 0;
            int nextUser = 0; 
            for (MDocumentNumber docNumber : docNumbers) 
            {   
                createdBy = docNumber.getCreatedBy();           
                MAttachment attachment = new MAttachment(getCtx(), MDocumentNumber.Table_ID, docNumber.get_ID(), get_TrxName());
                int attchmentCount = attachment.getEntryCount();
                int versionCount = docNumber.getVersionCount().intValue();
                if(versionCount > 0 && attchmentCount < versionCount)
                {
                    if(nextUser != 0 && nextUser != createdBy)
                    {
                        outerMap.put(nextUser, innerMap); // for a new user, put the inner map data to Outer Map
                        innerMap.clear();               // Here while clearing the inner map, the outer map value is also clearing  
                    }
                    innerMap.put(docNumber, (attchmentCount-versionCount));
                    nextUser = createdBy;
                }           
            }   
            outerMap.put(createdBy, innerMap);

【问题讨论】:

  • 您只有 1 个 innerMap 实例 - 也许您想为添加到 outerMap 的每个条目创建一个新的 innerMap 实例?
  • @TmTron 谢谢,意思是我必须在循环内创建innerMap = new HashMap&lt;MDocumentNumber, Integer&gt;();
  • 感谢@TmTron。它运作良好。

标签: java hashmap


【解决方案1】:

感谢@Tm Tron。评论运作良好。我在这里为我的前任发布更改:

HashMap<MDocumentNumber, Integer> innerMap = new HashMap<MDocumentNumber, Integer>();
        HashMap<Integer, HashMap<MDocumentNumber, Integer>> outerMap = new HashMap<Integer, HashMap<MDocumentNumber, Integer>>();
        List<MDocumentNumber> docNumbers = new Query(getCtx(), MDocumentNumber.Table_Name, "IsActive = 'Y'", get_TrxName())
                                            .setOrderBy("CreatedBy").list();        
        int createdBy = 0;
        int nextUser = 0; 
        for (MDocumentNumber docNumber : docNumbers) 
        {   
            createdBy = docNumber.getCreatedBy();           
            MAttachment attachment = new MAttachment(getCtx(), MDocumentNumber.Table_ID, docNumber.get_ID(), get_TrxName());
            int attchmentCount = attachment.getEntryCount();
            int versionCount = docNumber.getVersionCount().intValue();
            if(versionCount > 0 && attchmentCount < versionCount)
            {
                if(nextUser != 0 && nextUser != createdBy)
                {
                    outerMap.put(nextUser, innerMap); // for a new user, put the inner map data to Outer Map
                    //innerMap.clear();             // Here while clearing the inner map, the outer map value is also clearing
                    innerMap = new HashMap<MDocumentNumber, Integer>();
                }
                innerMap.put(docNumber, (attchmentCount-versionCount));
                nextUser = createdBy;
            }           
        }   
        outerMap.put(createdBy, innerMap);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-03-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多