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;
tPlan
是 java.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...
}
关于代码的一些解释: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;
tPlan
是 java.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...
}