Использование Java "для каждого" и "продолжить" в цикле - PullRequest
0 голосов
/ 14 октября 2019

У меня есть большой метод, который выглядит следующим образом:

for (Person person : persons) {
   if (!person.isValid()) {
      continue;
   }
   ....
   boolean isDeleted = deletePersonFromDB1(person);
   if (!isDeleted) {
     continue;
   }
   ....

}

В основном я хочу удалить список людей из разных источников БД. Если какая-либо операция не удалась, я хочу перейти к следующему человеку. Я хотел бы упростить подобное и поместить свою бизнес-логику в метод:

for (Person person : persons) {
    checkValidityAndDelete(person)
}

Но, к сожалению, я не могу использовать слово continue внутри моего метода checkValidityAndDelete

Ответы [ 2 ]

0 голосов
/ 14 октября 2019

Другой вариант, если вы хотите вытащить все в цикле к другому методу, просто return ~ из него, чтобы вызвать останов метода.

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
}
0 голосов
/ 14 октября 2019

Сделайте так, чтобы ваш метод checkValidityAndDelete возвращал логическое значение, чтобы указать, является ли этот человек действительным и удаленным:

private boolean checkValidityAndDelete(Person person) {
  return person.isValid() && deletePersonFromDB1(person);
}

Итак, если checkValidityAndDelete возвращает false, вы можете continue, если он возвращает 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...
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...