此方法使用 Cayenne SelectQuery 返回员工对象列表
List<Employee> getEmployees() {
...
return getObjectContext().performQuery(query);
}
现在,我正在遍历结果
List<Employee> employees = getEmployees();
// test loop 1
for (Employee employee : employees) {
//print out employee name
}
for (Employee employee : employees) {
//print out employee name
if (matchesSomeCondition) {
employees.remove(employee);
}
}
// test loop 2
for (Employee employee : employees) {
//print out employee name
}
在测试循环 1 中,它将显示例如:
-John Smith
-Jane Doe
-Roger Wilco
在实际的删除循环中,它会省略一些人:
-John Smith
-Roger Wilco
然后在测试循环 2 中,它会输出所有人:
-John Smith
-Jane Doe
-Roger Wilco
当我将删除循环更改为:
List<Employee> badEmployees = new ArrayList<Employee>();
for (Employee employee : employees) {
//print out employee name
if (matchesSomeCondition) {
badEmployees.add(employee);
}
}
employee.removeAll(badEmployees);
然后循环工作正常。我只是不明白为什么我在第一个示例中没有收到错误或异常。更奇怪的是为什么每个测试循环的结果都不同。