1. 程式人生 > >foreach 迴圈,刪除list中的元素是報錯

foreach 迴圈,刪除list中的元素是報錯

最近專案中碰到一個從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併發修改異常