Вы изменяете коллекцию, для которой вы выполняете итерацию. Это вызовет ошибку. Вы перебираете obj здесь:
for (HashMap<String, Object> tmpObj : obj) {
Но удалите его здесь:
obj.remove(tmpObj);
Я рекомендую хранить элементы, которые нужно удалить, в другой коллекции и удалять их с карты только после завершения цикла for.
Редактировать : << <em>Добавление примера кода >>
List<Integer> toRemove = new LinkedList<Integer>();
for (int i = 0; i < obj.size(); i++) {
HashMap<String, Object> tmpObj = obj.get(i);
if (/* something */) {
/* ... */
/* obj.remove(tmpObj); replaced with*/
toRemove.add(0, i); // notice that I add bigger indices first
}
}
// Here we make the removal from bigger indices to smaller ones
// Notice that we iterate and remove from different collections.
for (Integer indexToDelete : toRemove) {
obj.remove(indexToDelete);
}
Это основная идея, когда вы хотите удалить элементы. Однако вам нужно вывести obj как измененный сразу в цикле for. Тогда, вероятно, немного хаков с индексами сделает вашу работу лучше:
for (int i = 0; i < obj.size(); i++) {
HashMap<String, Object> tmpObj = obj.get(i);
if (/* something */) {
/* ... */
/* obj.remove(tmpObj); replaced with*/
obj.remove(i); // We erase the element but this time we do not use enhanced for loop which is ok.
i--; // we decrease the index because th enumber of elements decreased. Index hack. Ugly.
System.out.println(obj); // modified obj :)
}
}