【发布时间】:2016-02-17 21:30:45
【问题描述】:
我需要遍历一个对象集并找到所有相等的成本类别并将它们连接在一起。我试图将一个while循环放入另一个while循环中。但是,这不起作用;我总是得到 ConcurrentModificationException。为什么我还是会得到这个?
如何使它工作,使它像两个嵌套的for循环一样工作
public Set<ExpenseItem> getConsolidatedExpenseitems(String expenseUid) {
Expense expense = getByUid(expenseUid);
Set<ExpenseItem> expenseItems = expense.getExpenseItems();
Set<ExpenseItem> expenseItemsInner = expense.getExpenseItems();
for(ExpenseItem e : expenseItems) { // ConcurrentModificationException
Iterator<ExpenseItem> expenseItemsIteratorInner = expenseItems.iterator();
expenseItemsIteratorInner = expenseItemsInner.iterator();
while(expenseItemsIteratorInner.hasNext()) {
ExpenseItem eInner = expenseItemsIteratorInner.next();
if(e != null) {
if(eInner.getCostCategory().equals(e.getCostCategory())) {
System.out.println(e.getCalculatedAmount());
System.out.println(eInner.getCalculatedAmount());
System.out.println("---");
expenseItemsIteratorInner.remove();
}
}
}
}
return null;
}
【问题讨论】:
-
唯一有效的迭代器。
-
那个标题需要修改
-
您不能在列表中添加/删除元素并同时对其进行迭代。更改创建辅助列表的算法以仅添加必要的项目
-
在使用
Iterator从这个Set时,您不能更改Set(您可以使用foreach-loop 执行此操作)。否则,你会得到一个ConcurrentModificationException。 This discussion 可能会有所帮助。