gpt4 book ai didi

java - 循环 Cayenne PerformQuery() 结果时出现意外值

转载 作者:行者123 更新时间:2023-12-01 04:43:28 24 4
gpt4 key购买 nike

此方法使用 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);

然后循环就可以正常工作了。我只是不明白为什么在第一个示例中没有收到错误或异常。更奇怪的是为什么每个测试循环的结果都不同。

最佳答案

Java for-each 循环并不是为操作其迭代的 List 而设计的。您需要访问Iterator才能删除当前元素。 for-each 循环隐藏了迭代器,因此您无法调用 remove()

因此,您选择的方法是唯一的方法(使用 for-each)。

您可以阅读更多相关信息 here .

关于java - 循环 Cayenne PerformQuery() 结果时出现意外值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16178420/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com