ジオ・トーマス:
私は、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
HPCS:
あなたはこのように反復子を使用することができます。
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トーマス私は、あなたが編集に答えをしようとしていた参照してください。あなたが編集に送るコードの問題は)(あなたがiterator.hasNext後iterator.next()mutltiplle回を呼び出しているということです。あなたがiterator.nextを呼び出すたびに()は、リスト内の次の要素ではなく、同じものを返します!
あなたはこのようにそれを使用する必要があります。
LocationHourListHB locationHour = iterator.next()
その後、コードlocationHourに使用します。