我有一个Java Spring MVC Web应用程序。我正在尝试遍历一个ArrayList,并根据某些条件向列表中添加新元素。我使用以下代码:
List<LocationHourListHB> locationHoursList = new ArrayList<LocationHourListHB>();
List<HoursTO> hourList = listHoursByEntityId(applicationId, siteId, locationId);
for (HoursTO hoursTO : hourList)
{
if(locationHoursList.size() == 0)
{
LocationHourListHB locationHourListHB = new LocationHourListHB();
locationHourListHB.setStartTIme(hoursTO.getStartTime());
locationHourListHB.setEndTime(hoursTO.getEndTime());
locationHoursList.add(locationHourListHB);
break;
}
for (LocationHourListHB locationHour : locationHoursList)
{
if(hoursTO.getStartTime().equalsIgnoreCase(locationHour.getStartTIme()) && hoursTO.getEndTime().equalsIgnoreCase(locationHour.getEndTime()))
{
break;
}
else
{
LocationHourListHB locationHourListHB = new LocationHourListHB();
locationHourListHB.setStartTIme(hoursTO.getStartTime());
locationHourListHB.setEndTime(hoursTO.getEndTime());
locationHoursList.add(locationHourListHB);
}
}
}
}
但是执行这个代码会抛出一个 "concurrent modification exception" 异常。我做了一些研究,发现可以使用 "iterator" 或 "list iterator" 来解决这个问题。有没有一个好的例子可以跟随使用 "list iterator" 来解决我的问题。或者有更好的解决方案可以帮助我。
我尝试了以下代码:
for (HoursTO hoursTO : hourList)
{
if(locationHoursList.size() == 0)
{
LocationHourListHB locationHourListHB = new LocationHourListHB();
locationHourListHB.setStartTIme(hoursTO.getStartTime());
locationHourListHB.setEndTime(hoursTO.getEndTime());
locationHoursList.add(locationHourListHB);
}
ListIterator<LocationHourListHB> iter = locationHoursList.listIterator();
while(iter.hasNext())
{
if(!(iter.next().getStartTIme().equalsIgnoreCase(hoursTO.getStartTime()) && iter.next().getEndTime().equalsIgnoreCase(hoursTO.getEndTime())))
{
LocationHourListHB locationHourListHB = new LocationHourListHB();
locationHourListHB.setStartTIme(hoursTO.getStartTime());
locationHourListHB.setEndTime(hoursTO.getEndTime());
iter.add(locationHourListHB);
}
}
}
但是如果出现NoSuchElementException
异常