![](/img/trans.png)
[英]Iterator provided by the Hibernate Interceptor post flush method throws ConcurrentModificationException
[英]Second calling of an method with iterator throws ConcurrentModificationException
我嘗試做的 - 在兩個不同的 List 上調用兩次 a 方法
:
我正在運行以下代碼:
private List<P> nlPars; //initialised in constructor
private List<P> enPars; //initialised in constructor
public void build(){
...
removeHeaders(nlPars); //first time calling, no problem
removeHeaders(enPars); //second time calling, throws ConcurrentModificationException
...
}
調用這個方法:
@VisibleForTesting
void removeHeaders(final List<P> pars) {
pars.removeIf(p -> isTranslation(p));
for (final ListIterator<P> it = pars.listIterator(); it.hasNext(); ) {
if (isTitle(it.next())) {
it.remove();
if (it.hasNext()) {
it.next();
it.remove();
}
break;
}
}
}
我不知道為什么。 調試器告訴我,在第二次時,pars.listIterator() 無法計算/拋出 ConcurrentModificationException。
我一直在尋找幾個小時來解決這個問題。 也許有人可以幫忙!
問候,
巴特
我解決了,問題不在這里。 問題在於 enPars en nlPars 的構建。 它們的派生方式類似於nlPars = pars.subList(...)
。 這很好,但它們是解析列表上的視圖,迭代器是相同的,因此存在問題。
改變它解決了這個問題:
enPars = new ArrayList<P>(pars.subList(0, i));
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.