Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/oracle/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何从列表中删除该值_Java_Servlet 3.0 - Fatal编程技术网

Java 如何从列表中删除该值

Java 如何从列表中删除该值,java,servlet-3.0,Java,Servlet 3.0,这是我的代码: 输出: 不会从列表中删除相等的值 您的zoneList是AuditPlanSch的列表,但位于zoneList.remove(zone.getZoneCode())您正在尝试删除代码(我假定它是一个整数或字符串) 所以一个变化是:zoneList.remove(zone.getZoneCode())应为区域列表。删除(区域) 但是,这将产生ConcurrentModificationException,因为您正试图从列表中删除要重新设置的项目。因此,将其改为: for(Itera

这是我的代码:

输出:

不会从列表中删除相等的值


您的
zoneList
AuditPlanSch
的列表,但位于
zoneList.remove(zone.getZoneCode())您正在尝试删除代码(我假定它是一个整数或字符串)

所以一个变化是:
zoneList.remove(zone.getZoneCode())应为
区域列表。删除(区域)

但是,这将产生ConcurrentModificationException,因为您正试图从列表中删除要重新设置的项目。因此,将其改为:

for(Iterator<AuditPlanSch> it = zoneList.iterator(); it.hasNext(); ) {
  AuditPlanSch zone = it.next();
  if (tmp.getZoneCode().equals(zone.getZoneCode())) { 
    it.remove();
  }
  options[ii++] = new HTMLOption(zone.getZoneCode(), zone.getZoneName(), false);
}

首先,您没有使用正确的实例类型删除此列表

从该列表中删除指定元素的第一个匹配项(如果存在)(可选操作)。如果此列表不包含该元素,则它将保持不变。更正式地说,删除索引i最低的元素,以便(o==null?get(i)==null:o.equals(get(i))(如果存在这样的元素)。如果此列表包含指定的元素,则返回true(如果此列表因调用而更改,则返回等效值)

因此,您需要传递一个可以与列表中的实例进行比较的实例:

zoneList.remove(zone);
其次,
AuditPlanSch
必须实现
equals(Object)
方法。这是List.remove(Object)
查找要删除的实例所必需的。(如文件所述)

最后,您需要使用一个迭代器来更新一个列表(或者通过索引,但迭代器更简单),否则您将得到一个并发修改异常


当然,您可以使用更简单的方法,使用以下方法:

这将简单地删除每个实例
zone
,其中
tmp.getZoneCode().equals(zone.getZoneCode())
为true。请注意,
tmp
必须是final(或实际上是final)才能编译此lambda表达式


这里的优点是,您不必在实例实现
后正确地定义要使用的条件。

Temp==2==14751---list-2-14751 After Temp===14751---list--14751---iii1Value相同,但不从列表中删除,Temp==2==14751---list-2-14751 After Temp==14751---list--ii1first,确保您的POJO实现了“equals”(请注意,这是将要使用的参数的
equals
方法,因此它必须是
AuditPlanSch
才能工作),然后,您不能使用
为每个
循环从
列表中删除。您需要使用迭代器。equals()是正确的,它将在if块内执行。
List.remove(Object o)
使用
o.equals
方法来查找第一个出现,这就是我提到的部分。我不够完整。不工作,它在java.base/java.util.ArrayList$Itr处显示错误,java.util.ConcurrentModificationException在java.base/java.util.ArrayList$Itr处显示错误,checkForComodification(ArrayList.java:939)在java.base/java.util.ArrayList$Itr处显示错误。下一步(ArrayList.java:893)在for循环线中显示错误,两个bean都是字符串值,不是Integer@EdwinBenjamin我修改了代码,它确实包含了一个错误<代码>区域列表。删除(区域)
应该是
it.remove()使用迭代器时。你能再试一次看看它现在是否有效吗?@Kevin:还是那个值没有删除,在Temp====14751---list--14751---ii1之前,在Temp===14751---list--14751---ii1之后
for(Iterator<AuditPlanSch> it = zoneList.iterator(); it.hasNext(); ) {
  AuditPlanSch zone = it.next();
  if (tmp.getZoneCode().equals(zone.getZoneCode())) { 
    it.remove();
  }
  options[ii++] = new HTMLOption(zone.getZoneCode(), zone.getZoneName(), false);
}
for(Iterator<AuditPlanSch> it = zoneList.iterator(); it.hasNext(); ) {
  System.out.println("List before: "+zoneList);
  AuditPlanSch zone = it.next();
  String zoneCode = zone.getZoneCode();
  String zoneName = zone.getZoneName();
  if (tmp.getZoneCode().equals(zone.getZoneCode())) {
    System.out.println("Remove zone with code "+zone.getZoneCode());
    it.remove();
    zoneCode = null;
    zoneName = null;
  }
  System.out.println("List after: "+zoneList);
  options[ii++] = new HTMLOption(zoneCode, zoneName, false);
}
zoneList.remove(zone);
final tmp ...
list.removeIf(zone -> tmp.getZoneCode().equals(zone.getZoneCode()))