我有一个 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);
}
}
}
}
但是执行它会抛出一个并发修改异常
。我做了一些研究,发现可以使用 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
最佳答案
您可以像这样使用 ListIterator:
ArrayList<LocationHourListHB> locationHoursList = new ArrayList<LocationHourListHB>();
ListIterator<LocationHourListHB> iterator = locationHoursList.listIterator();
while(iterator.hasNext(){
LocationHourListHB locationHour = iterator.next()
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());
iterator.add(locationHourListHB);
}
}
@Geo Thomas 我看到您正在尝试编辑答案,因为最好写入评论或更新您自己的问题。您发送给编辑的代码的问题是您在 iterator.hasNext() 之后多次调用 iterator.next()。每次调用 iterator.next() 时,它都会返回列表中的下一个元素,而不是同一个元素!
你应该像这样使用它:
LocationHourListHB locationHour = iterator.next()
然后在代码中使用 locationHour。
关于java - 如何在没有并发修改异常的情况下在for循环内将元素添加到java中的arraylist,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53682882/