Я пытаюсь проверить arrayylist, содержащий элемент (знаменитость), на адрес электронной почты, введенный пользователем, тогда, если он находится в списке, он будет обновлен, но если не будет создан новый экземпляр. У меня проблема: когда я ввожу новую знаменитость, она отображает повторяющиеся записи.
Выход:
[
Celebrity [firstName=Frank, lastName=Sinatra, netWorth=1000000.0, [email protected]],
Celebrity [firstName=Michael, lastName=Jackson, netWorth=1.0E9, [email protected]],
Celebrity [firstName=Aaron, lastName=Hoffman, netWorth=10000.0, [email protected]],
Celebrity [firstName=new, lastName=new, netWorth=900.0, [email protected]],
Celebrity [firstName=new, lastName=new, netWorth=900.0, [email protected]],
Celebrity [firstName=new, lastName=new, netWorth=900.0, [email protected]]
]
if (celeb.getEmail().contains(request.getParameter("email"))) {
celeb.setNetWorth(Double.parseDouble((request.getParameter("netWorth"))));
} else {
Celebrity cel = new Celebrity(request.getParameter("firstName"),
request.getParameter("lastName"), request.getParameter("email"),
Double.parseDouble(request.getParameter("netWorth")));
celebrityList.add(cel);
}
https://repl.it/repls/FumblingOrderlyEllipses (Полный код)
Добавьте контекст к вашему вопросу, чтобы его было легче понять. Также здесь много стоит достойный пост с кодом минимальный воспроизводимый пример.
Я бы предположил, что некоторые или все ваши поля статичны?
Вы делаете этот оператор if
внутри цикла, такого как for(Celebrity celeb : celebrityList)
, да?
Проблема в том, что новая знаменитость хранится не один раз. Операторы if находятся внутри цикла
@Jamy Так что не зацикливайте их?
Вы добавляете новую знаменитость в свой список на каждом этапе проверки.
Всегда пишите код так, как вы бы объяснили его кому-то другому. Таким образом, правильный (псевдокод) становится:
if (emailExistsInList(data.email))
updateExistingCeleb(data);
else
addNewCeleb(data);
...
boolean emailExistsInList(String email){
for (Celebrity celeb: celebs)
if (celeb.email.equals(email)) return true;
}
}
void updateExistingCeleb(String email, CelebData data){
// your search and update code here
}
void addNewCeleb(CelebData data){
Celeb newCeleb = // your instantiation logic here
celebs.add(newCeleb);
}
Большое спасибо. @Joeri Hendrickx
и в чем, кажется, беда молодой Джейми?