После удаления из коллекции List он все равно каким то образом попадает в HashMap
Есть метод, который удаляет планету из List:
*
**public List<Planet> destroyPlanet(Planet planet) {
if (planetList.contains(planet)) {
planetList.remove(planet);
System.out.println("Планета " + planet.getPlanetName() + " уничтожена");
return planetList;
} else {
System.out.println("Планета " + planet.getPlanetName() + " не найдена");
return planetList;
}
}**
Но после этого эта планета все равно почему- добавляется в Мар:
public HashMap<Planet, Lord> addPlanetToLord(Planet planet, Lord lord) {
if (lordAndPlanets.containsKey(planet)) {
System.out.println("У планеты " + planet.getPlanetName() + " есть повелитель");
return lordAndPlanets;
} else {
lordAndPlanets.put(planet, lord);
System.out.println("Планета " + planet.getPlanetName() + " передана поелителю " + lord.getLordName());
return lordAndPlanets;
}
}
Каким образом HashMap все равно добавляет удаленную планету!? https://github.com/butr1m/nti.team.git По проекту есть еще вопросы, если кто-то согласится ответить, буду благодарен!
Ответы (2 шт):
Метод destroyPlanet просто удаляет экземпляр объекта planet из списка. Сам объект planet не удаляется. Дальше, в вашем варианте метод addPlanetToLord просто добавляет этот экземпляр планеты в Map.
Код в репозитории несколько отличается, но он должен сначала проверить, существует ли планета, то есть, содержится ли она в списке, который возвращается из PlanetService, и только тогда проверять, есть ли у неё хозяин:
public HashMap<Planet, Lord> addPlanetToLord(Planet planet, Lord lord) {
if (!planetService.getPlanetList().contains(planet)) {
System.out.println("Планета " + planet.getPlanetName() + " не существует!");
} else if (lordAndPlanets.containsKey(planet)) {
System.out.println("Планета " + planet.getPlanetName() + " уже принадлежит повелителю " + lord.getLordName());
} else {
lordAndPlanets.put(planet, lord);
System.out.println("Планета " + planet.getPlanetName() + " передана повелителю " + lord.getLordName());
}
return lordAndPlanets;
}