Java 删除后的新值 return

Java new values return after remove

关于代码的一些解释:ntTPla.values() 包含计划,并且在某些计划中可以包含包(儿童的)。有代码将包添加到计划“ntTPla.addPackage”。在此代码之后(当所有包都将添加到计划中时)我应该检查包并删除错误的包。我写了代码,检查包是否好并删除错误的。问题 - 如何 return 所有计划和附近的新套餐?因为现在编码 returning 旧的。我调试并删除工作正常,只需要修复 return。我的代码应该是什么样子?

[...]
        List<Plan> tPlan = new ArrayList<Plan>();
        tPlan.addAll(ntTPla.values());
        
        List<Packet> packetFirst = new ArrayList<Packet>();
        packetFirst.addAll(tPlan.get(0).getPacket());
        
        String test2 = null;
            for (int i = 0 ; i < packetFirst.size(); i++){ 
                if(packetFirst.get(i).getBest()) {
                    test2 = packetFirst.get(i).getCode();
                    break;
                }
            }
            
            for (int ii =  packetFirst.size() - 1 ; ii >= 0; ii--){ 
                if(!packetFirst.get(ii).getCode().equals(test2)) {
                    packetFirst.remove(ii);
                }
            }
        
        return ntTPla.values();

根据您的描述,问题似乎是 return ntTPla.values(); 语句返回的值仍然包含已删除的数据包。您从 packetFirst 中删除了该项目,但未从 ntPla.values() 中删除该项目。你只需要做类似

的事情
for (int ii =  packetFirst.size() - 1 ; ii >= 0; ii--){ 
    if(!packetFirst.get(ii).getCode().equals(test2)) {
        packetFirst.remove(ii);
        ntPla.values().remove(ii);
    }
}

编辑

在评论区讨论过这个问题后,也许我对这个问题的理解比以前更好了。这是我建议的解决方案:

for (int planIndex = 0; planIndex < tPlan.size(); planIndex++) {
    Plan plan = tPlan.get(planIndex);
    int bestIndex = 0;
    for (int packetIndex = 0; packetIndex < plan.getPacket().size(); packetIndex++) {
        Packet packet = plan.getPacket().get(packetIndex);
        if (packet.getBest()) bestIndex = packetIndex;
    }
    if (bestIndex >= 0) plan.getPacket.remove(bestIndex);
}

可能我还是没看懂问题。如果是这样的话,请见谅。

//return ntTPla.values();

tPlan.set(0, packetFirst);
return tPlan;

用上面的内容替换最后一行。您创建了 tPlan,以便您可以安全地修改独立于 ntTPla.values() 中原始计划列表的计划副本。您需要用新处理的 packetFirst 替换计划 0 of tPlan。然后returntPlan.

更新: 我之前的代码是错误的。

final Plan newPlan = new Plan();
// newPlan.setPackage(packetFirst);
// Used a wrong setter name earlier.
newPlan.setPacket(packetFirst);
tPlan.set(0, newPlan);
return tPlan;

tPlanjava.util.List 类型吗? .set(...)

更新 2:

for (int ii =  packetFirst.size() - 1 ; ii >= 0; ii--){ 
    if(!packetFirst.get(ii).getCode().equals(test2)) {
        packetFirst.remove(ii);
    }
}
// After your code above...

final Plan newPlan = new Plan();
//...

// I am guessing you have a class like this...
public class Plan {
    private List<Packet> packet;

    public void setPacket(List<Packet> packet) {
        this.packet = packet;
    }
    // getter here...
}