コード:
List<InData> inDataList= generateInRepo.getInList();
for(int i=0; i<inDataList.size();i++){
if(somecondition){
inDataList.remove(i);
}
}
ここでの問題は、アイテムが削除されると、リストのサイズが乱れ、コードが失敗することです。この機能を正しい方法で実現するにはどうすればよいですか?
コード:
List<InData> inDataList= generateInRepo.getInList();
for(int i=0; i<inDataList.size();i++){
if(somecondition){
inDataList.remove(i);
}
}
ここでの問題は、アイテムが削除されると、リストのサイズが乱れ、コードが失敗することです。この機能を正しい方法で実現するにはどうすればよいですか?
i
コードの問題は、削除後にインクリメントしないことです。
反復するリストから削除する秘訣は、逆方向に反復することです。
for( int i=inDataList.size()-1; i <= 0 ; i--) {
if(somecondition){
inDataList.remove(i);
}
}
このようにして、次の反復が、既にアクセスしたインデックスに到達することはありません。
使用するIterator
List<InData> inDataList = generateInRepo.getInList();
for (Iterator<InData> iterator = inDataList.iterator(); iterator
.hasNext();) {
InData inData = (InData) iterator.next();
if (somecondition) {
iterator.remove();
}
}
を使用Iterator
して、リストから要素を削除してみてください。
for(Iterator<InData> itr = inDataList.iterator();itr.hasNext();itr.next();) {
if(somecondition) {
itr.remove();
}
}