在这里,我收集了内部 map 中的一些数据以及用户 ID,并将其放入外部 map 中。然后,内部映射正在清除并填充另一组数据,并针对用户数量进行相同的循环。 问题是在清除 InnerMap 时,放置在外部映射中的值也会被清除。我想我做错了。请多多指教。
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);
最佳答案
谢谢@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);
关于java - 嵌套映射问题 : While clearing the inner map, 外部映射值也被清除,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44472802/