使用java;对于每一个“;及;“继续”;循环
我有一个大方法,它看起来像这样:使用java;对于每一个“;及;“继续”;循环,java,loops,Java,Loops,我有一个大方法,它看起来像这样: for (Person person : persons) { if (!person.isValid()) { continue; } .... boolean isDeleted = deletePersonFromDB1(person); if (!isDeleted) { continue; } .... } 基本上,我想从不同的数据库源中删除一个人员列表。如果任何操作失败,我想继续下一
for (Person person : persons) {
if (!person.isValid()) {
continue;
}
....
boolean isDeleted = deletePersonFromDB1(person);
if (!isDeleted) {
continue;
}
....
}
基本上,我想从不同的数据库源中删除一个人员列表。如果任何操作失败,我想继续下一个人。
我希望这样简化,并将我的业务逻辑放在一个方法中:
for (Person person : persons) {
checkValidityAndDelete(person)
}
但不幸的是,我无法在我的方法
checkValidityAndDelete中使用continue
一词,使您的checkValidityAndDelete
方法返回一个布尔值来指示此人是否既有效又已被删除:
private boolean checkValidityAndDelete(Person person) {
return person.isValid() && deletePersonFromDB1(person);
}
因此,如果checkValidityAndDelete
返回false
,则可以继续
,如果返回true
,则可以继续执行其余的代码逻辑。如果您希望执行此操作,也可以不使用continue
:
for (Person person : persons) {
if(checkValidityAndDelete(person)) { // If the person is valid,
// perform logic...
}
// if not valid, skip if, and continue to next person...
}
如果您希望将循环中的所有内容都拉到另一个方法,那么另一个选项就是从它返回,以触发该方法停止
public void checkValidity(final Person person) {
if (person.something) {
return;
// From the calling loop, this will act as a continue
// since the method call would stop, and so the next
// loop iteration would start.
}
// Do some more stuff
}
您可以使用该方法返回一个布尔值,然后执行一些如果(结果){continue;}
键入内容?主题之外,但在删除person
对象后,您为什么要继续使用该对象?或者事实上,如果您正在执行的业务逻辑像您在那里做的那样简单(而该方法只是一个空洞
)您可以从它返回,无论您在哪里继续。这将导致方法终止,循环开始下一次迭代。您应该将其分解为多个方法。@JoakimDanielson:我见过类似的逻辑,例如事件发布、日志记录、现在已失效的资源清理等。