Java 删除后的第一个列表更改
我有以下代码:Java 删除后的第一个列表更改,java,list,Java,List,我有以下代码: List<String> allAgenciesList = new ArrayList<String>(); for (AgencyEntryWithStatus agency : vAgencyEntryWithStatusList) { allAgenciesList.add(agency.getName() + "==" + agency.getId()); } vRenameRuleXGlobalEntryList = vToolsDe
List<String> allAgenciesList = new ArrayList<String>();
for (AgencyEntryWithStatus agency : vAgencyEntryWithStatusList) {
allAgenciesList.add(agency.getName() + "==" + agency.getId());
}
vRenameRuleXGlobalEntryList = vToolsDelegate.searchRenameRuleXGlobal(dStartDate2, dEndDate);
List<String> myList = new ArrayList<String>();
for (RenameRuleEntry rEntry : vRenameRuleEntryList) {
RruleAgenciesGlobal rRuleAgenciesGlobalEntry = new RruleAgenciesGlobal();
rRuleAgenciesGlobalEntry.setRr(rEntry);
vRenameRuleXAgencyEntryList2 = vToolsDelegate.searchRenameRuleXAgency(dStartDate2, dEndDate, null, rEntry.getId());
myList.clear();
for (RenameRuleXAgencyEntry rAgency : vRenameRuleXAgencyEntryList2) {
myList.add(rAgency.getAgencyName() + "==" + rAgency.getAgencyId());
}
Gson gson = new Gson();
if(!myList.isEmpty()) {
String jsonAgencies = gson.toJson(myList);
rRuleAgenciesGlobalEntry.setAgencies(jsonAgencies);
allAgenciesList.removeAll(myList);
}
String jsonAgenciesNotAssigned = gson.toJson(allAgenciesList);
rRuleAgenciesGlobalEntry.setAgenciesNotAssigned(jsonAgenciesNotAssigned);
}
List allAgenciesList=new ArrayList();
适用于(AgencyEntryWithStatus代理机构:VagencyEntryWithStatus列表){
allAgenciesList.add(agency.getName()+“==”+agency.getId());
}
vRenameRuleXGlobalEntryList=vToolsDelegate.searchRenameRuleXGlobal(dStartDate2,dEndDate);
List myList=new ArrayList();
对于(重命名入口rEntry:vRenameRuleEntryList){
RRULAgenciesGlobal RRULAgenciesGlobalEntry=新建RRULAgenciesGlobal();
rrleagenciesglobalentry.setRr(rEntry);
vRenameRuleXAgencyEntryList2=vToolsDelegate.searchRenameRuleXAgency(dStartDate2,dEndDate,null,rEntry.getId());
myList.clear();
对于(重命名LexagencEntry rAgency:VrenamerLexagencEntryList2){
添加(rAgency.getAgencyName()+“==”+rAgency.getAgencyId());
}
Gson Gson=新的Gson();
如果(!myList.isEmpty()){
字符串jsonAgencies=gson.toJson(myList);
RRLeagenciesGlobalEntry.setAgencies(jsonAgencies);
allAgenciesList.removeAll(myList);
}
字符串jsonAgenciesNotAssigned=gson.toJson(allAgenciesList);
rrLeagenciesGlobalEntry.setAgenciesNotAssigned(jsonAgenciesNotAssigned);
}
第一个for循环找到了12个代理,并将它们放入一个名为:allAgenciesList的列表中
在第二个for循环中,如果myList不为空,我们将执行以下操作:
allAgenciesList-myList
假设在第一次迭代中,我们发现myList size==2
因此,在:
allAgenciesList.removeAll(myList);12-2=10是allAgenciesList的新大小
问题是对于下一次迭代,我需要allAgenciesList与初始元素(size=12)一起完成,但它只有10个元素(size=10),而不是size=12。
非常感谢您的帮助。删除元素之前,请复制其他列表中的所有元素,如:
List<String> allAgenciesListCopy;//after allAgenciesList defination
....
List<String> allAgenciesListCopy = new ArrayList<String>(allAgenciesList);
allAgenciesList.removeAll(myList);
...
allAgenciesList = allAgenciesListCopy;//here you will have all 12 elements instead of 10.
List allAgenciesListCopy//在allAgenciesList定义之后
....
List allAgenciesListCopy=新建ArrayList(allAgenciesList);
allAgenciesList.removeAll(myList);
...
allAgenciesList=allAgenciesListCopy//在这里,您将拥有全部12个元素,而不是10个。
列表操作在循环上是持久的。如果只想临时筛选myList
中的图元,请在内部循环的每个迭代中将新的临时ArrayList初始化为工作集:
List<String> allAgenciesList = new ArrayList<String>();
// [...]
for(RenameRuleEntry rEntry : vRenameRuleEntryList) {
List<String> workset = new ArrayList<String>(allAgenciesList);
// [...]
// Work with workset instead of allAgenciesList from now on
}
List allAgenciesList=new ArrayList();
// [...]
对于(重命名入口rEntry:vRenameRuleEntryList){
列表工作集=新阵列列表(allAgenciesList);
// [...]
//从现在起使用工作集而不是allAgenciesList
}
工作集
使用allAgenciesList
中的所有条目初始化,并将在下一次迭代中再次完全填充。您正在从列表中删除元素,然后抱怨缺少这些元素???Tl;dr,但是在调用removeAll()
方法之前,您是否尝试过复制allAgenciesList
?代码的格式非常糟糕,很难理解发生了什么。但据我所知,我认为您可以使用CollectionUtils.removeAll
,因为看起来您不想每次都修改allAgenciesList
。请参阅。我不建议在这里使用“备份还原”逻辑。在代码方面,修改副本本身总是更干净的,而不是复制原稿,修改和恢复原始值。但问题是OP可能正在对其原始列表做一些有用的操作,因为他希望列表中有10项,这就是为什么您无法避免此操作。de我们需要在之前清除allAgenciesList:allAgenciesList=allAgenciesListCopy?不需要。这将由垃圾收集器负责。即使allAgenciesListCopy正在更改,即使没有对其调用方法。即使您使用工作集,也会发生同样的情况,您可以在我的代码中演示如何操作吗?谢谢上面的介绍,我已经在你的代码中嵌入了这一行。如果仍然发生这种情况,您要么在循环之前而不是在循环中初始化了工作集,要么仍然调用allAgenciesList.removeAll(myList)代码>而不是工作集.removeAll(myList)代码>。