foreach 迴圈,刪除list中的元素是報錯
阿新 • • 發佈:2019-01-31
最近專案中碰到一個從list中去掉一定條件的元素的問題,第一反應就是用foreach進行迴圈操作,具體程式碼如下
if (list1.size() > 0) {
for(ParkingOrderEntity parkingOrderEntity : list1){
if(parkingOrderEntity.getStatus().name().equals(OrderStatus.billing.name())){
list1.remove(parkingOrderEntity);
}
}
}
但是確報了這樣一個錯誤
java.util.ConcurrentModificationException: null
at java.util.ArrayList$Itr.checkForComodification(ArrayList.java:901) ~[na:1.8.0_111]
at java.util.ArrayList$Itr.next(ArrayList.java:851) ~[na:1.8.0_111]
at com.infofuse.webServices.park.WebParkCheckResource.getBillingOrdersByLicencePlate (WebParkCheckResource.java:85) ~[classes/:na]
at com.infofuse.webServices.park.WebParkCheckResource$$FastClassBySpringCGLIB$$e163b36e.invoke(<generated>) ~[spring-core-4.2.0.RELEASE.jar:na]
at org.springframework.cglib.proxy.MethodProxy.invoke(MethodProxy.java:204) ~[spring-core-4.2.0.RELEASE .jar:4.2.0.RELEASE]
at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.invokeJoinpoint(CglibAopProxy.java:717) ~[spring-aop-4.2.0.RELEASE.jar:4.2.0.RELEASE]
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:157) [spring-aop-4.2.0.RELEASE.jar:4.2.0.RELEASE]
at org.springframework.aop.aspectj.MethodInvocationProceedingJoinPoint.proceed(MethodInvocationProceedingJoinPoint.java:97) ~[spring-aop-4.2.0.RELEASE.jar:4.2.0.RELEASE]
at com.infofuse.webServices.common.WSProcessAspect.around(WSProcessAspect.java:102) ~[classes/:na]
at sun.reflect.GeneratedMethodAccessor248.invoke(Unknown Source) ~[na:na]
Java foreach只能用於只讀的情況.如果需要刪除操作,可以使用迭代器或者for迴圈直接遍歷List.。所以在使用foreach來進行修改刪除操作的時候會丟擲個ConcurrentModificationException併發修改異常