我有一个Metricas的ArrayList。 每个Metrica都有一些属性和另一个ArrayList lForms。 我想要的是检查数据库以查看表单是否已填写,并更新lForms。 当我这样做时,我得到一个ConcurrentModificationException,我不知道如何摆脱它...
public ArrayList<Metrica> addAllForms(ArrayList<Metrica> lMetricas) {
ArrayList<Metrica> newlMet = lMetricas;
ArrayList<Formulario> lForms = null;
ArrayList<Formulario> newlForms;
Metrica newMetrica;
Formulario f;
for (Iterator<Metrica> it = lMetricas.iterator(); it.hasNext();) {
Metrica metrica = it.next();
newlForms = new ArrayList<Formulario>();
lForms = metrica.getlForms();
for (Iterator<Formulario> it2 = lForms.iterator(); it2.hasNext();) {
Formulario form = it2.next();
f = getForm(form);
if (f == null) {
addForm(form, metrica.getId());
Log.e("log", "adding form");
} else
form = f;
Log.e("log", "Getting adding form");
newlForms.add(form);
}
newMetrica = new Metrica();
newMetrica.setlForms(newlForms);
newMetrica.setClienteId(metrica.getClienteId());
newMetrica.setDatoValido(metrica.getDatoValido());
newMetrica.setDescription(metrica.getDescription());
newMetrica.setId(metrica.getId());
newMetrica.setProyectoProductoId(metrica.getProyectoProductoId());
newMetrica.setTipo(metrica.getTipo());
newlMet.add(newMetrica);
}
return lMetricas;
}
答案 0 :(得分:0)
而不是
for (Metrica metrica : lMetricas)
使用以下内容:
Iterator<Metrica> it = lMetricas.iterator();
while(it.hasNext())
{
Metrica metrica = it.next();
//...
}
同样,您需要使用lForms
进行相同的操作。
编辑:如果您想添加内容,则无法在迭代时添加它们。而是使用另一个ArrayList
来存储要添加的元素。然后,使用lMetricas.addAll()
一次性添加所有内容。
如果要将它们添加到特定位置,则需要使用Map<Metrica, Integer>
并使用这些值来查找要添加的位置。