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)