ArrayListを検索し、2つのイテレータと比較しています。最終的にXML出力になる文字列バッファに値を書き込んでいます。値を解析するときに、一致するitemIdを確認しています。マッチは通常、パーツと図面です。パーツには多くの図面が存在する可能性があります。私のXMLでは、すべての一致のタイプと名前を知り、値を一緒に追加する必要があります。
このArrayListの使用:
itemIdタイプ名
1000部ハンマー
1001部釘
1000dwgセマンティック
1002部定規
私のサンプルXML出力は大まかに次のようになります。
<Master itemId=1000 type=part name=hammer>
<Extra type=dwg name=semantic>
</Master>
<Master itemId=1001 type=part name=nail>
</Master>
<Master itemId=1002 type=part name=ruler>
</Master>
これは私の最初のループです
while (theBaseInterator.hasNext()){
ImportedTableObjects next = theBaseInterator.next();
currentEntry = next.identiferId;
currentType = next.typeId;
currentDatasetName = next.nameId;
compareInterator = tArray.listIterator(theBaseInterator.nextIndex());
compareEntriesofArray(currentEntry, currentType, currentDatasetName, compareInterator); <======= calling method for 2nd loop and compare check
}
2番目のループのメソッドを作成して比較します
private void compareEntriesofArray(Object currentEntry, Object currentType, Object currentDatasetName, ListIterator<ImportedTableObjects> compareInterator)
object nextEntry;
while (compareInterator.hasNext()) {
ImportedTableObjects next = compareInterator.next();
nextEntry = next.identiferId;
if(nextEntry.equals(currentEntry)) {
compareInterator.remove();
}
一致するものが見つかったら、リストから一致するエントリを削除しようとしています。一致したエントリを再確認する必要はありません。したがって、最初のループがリストの下に続く場合、そのエントリを再度チェックする必要はありません。
しかしもちろん、ConcurrentModificationExceptionが発生しています。私はその理由を完全に理解しています。エントリを削除しようとする代わりに、ブール値などでマークを付ける方法はありますか?最初のループがリスト内のそのエントリに到達すると、それをスキップして次のエントリに進むことがわかりますか?