Добавление и обновление новых элементов в arrayylist

Я пытаюсь проверить 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 (Полный код)

и в чем, кажется, беда молодой Джейми?

Scary Wombat 26.10.2018 03:11

Добавьте контекст к вашему вопросу, чтобы его было легче понять. Также здесь много стоит достойный пост с кодом минимальный воспроизводимый пример.

Hovercraft Full Of Eels 26.10.2018 03:13

Я бы предположил, что некоторые или все ваши поля статичны?

GhostCat 26.10.2018 03:17

Вы делаете этот оператор if внутри цикла, такого как for(Celebrity celeb : celebrityList), да?

Kevin Anderson 26.10.2018 03:28

Проблема в том, что новая знаменитость хранится не один раз. Операторы if находятся внутри цикла

Jamy 26.10.2018 06:50

@Jamy Так что не зацикливайте их?

Joeri Hendrickx 26.10.2018 08:56
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
2
6
37
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Вы добавляете новую знаменитость в свой список на каждом этапе проверки.

Всегда пишите код так, как вы бы объяснили его кому-то другому. Таким образом, правильный (псевдокод) становится:

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

Jamy 26.10.2018 17:08

Другие вопросы по теме