我正在尝试在arraylist中找到第一个和最新的对象。这些对象直接映射到mongo文档。
我可以通过检查_parentid字段来轻松找到第一个对象,该字段应该为null,已完成,可以正常工作。
尽管最新的对象有点棘手,因为它涉及对时间戳(长)进行排序并返回最新的对象。
我拥有的代码实际上正在完成工作-已由控制台日志证明,但是,在for循环的最后一步时出现错误。
java.util.ConcurrentModificationException
这是我的代码;
public String aggregateRecords(List <VehicleRegistration> records) {
VehicleRegistration parent;
VehicleRegistration latest;
//Parent = record without a parent id
for (Iterator<VehicleRegistration> iterator = records.iterator(); iterator.hasNext(); ) {
VehicleRegistration record = iterator.next(); <---errors here
if (record._parentid == null) {
parent = record;
System.out.println("parent="+parent);
iterator.remove();
}
//find latest child by timestamp
else {
records.sort(new Comparator<VehicleRegistration>() {
@Override
public int compare(VehicleRegistration v1, VehicleRegistration v2) {
return v1.timestamp.compareTo(v2.timestamp);
}
});
Collections.reverse(records);
System.out.println("sorted list="+records);
latest = records.get(0);
System.out.println("latest record="+latest);
}
}
//todo - merge together and return
return "this will be the aggregated record";
}
答案 0 :(得分:2)
正在对集合进行排序,同时对其进行迭代。
else块在以下几行上修改列表:
records.sort(new Comparator<VehicleRegistration>() {
@Override
public int compare(VehicleRegistration v1, VehicleRegistration v2) {
return v1.timestamp.compareTo(v2.timestamp);
}
});
Collections.reverse(records);
这会对列表进行两次排序,并在下次调用iterator.next()