У меня есть элемент с именем center. С этим я могу получить доступ к клеткам для животных по center.getCages()
(в клетке мало животных)
Если я сделаю .stream()
на center.getCages()
, я могу фильтровать по клеткам, которые содержат жителей (cage.getResidents()
)
И я хочу удалить резидента с его идентификатором, который я получаю из УДАЛЕНИЯ моего запроса.
<ns2:center xmlns:ns2="m1GIL:rest:tp">
<cages>
<capacity>25</capacity>
<name>usa</name>
<position>
<latitude>49.305</latitude>
<longitude>1.2157357</longitude>
</position>
<residents>
<cage>usa</cage>
<id>f2af5996-cc9c-4e97-9c00-3f847d533d50</id>
<name>Tic</name>
<species>Chipmunk</species>
</residents>
<residents>
<cage>usa</cage>
<id>c5e53e4c-7832-45bb-bd2d-3e75b5497987</id>
<name>Tac</name>
<species>Chipmunk</species>
</residents>
<residents>
<cage>usa</cage>
<id>53e21031-8314-47e4-a6ae-cbf8d78eb962</id>
<name>Bob</name>
<species>Arapaima gigas</species>
</residents>
<residents>
<cage>usa</cage>
<id>25b9723b-8cab-402c-8062-38054e3ea4d8</id>
<name>Toto</name>
<species>Arapaima gigas</species>
</residents>
</cages>
</ns2:center>
Спасибо заранее!
РЕДАКТИРОВАТЬ:
На данный момент я сделал это:
Cage selectedCage = center
.getCages()
.stream()
.filter(cage -> cage
.getResidents()
.stream()
.anyMatch(an -> an.getId().equals(animal_id)))
.findFirst()
.orElseThrow(() -> new HTTPException(404));
selectedCage
.getResidents()
.removeIf(an -> an.getId().equals(animal_id));
Но это не сработало.
Второе редактирование:
Cage selectedCage = center.getCages()
.stream()
.filter(cage -> cage.getResidents()
.stream()
.anyMatch(an -> an.getId().equals(UUID.fromString(animal_id))))
.findFirst()
.orElseThrow(() -> new HTTPException(404));
selectedCage.getResidents().removeIf(an -> an.getId().equals(UUID.fromString(animal_id)));
Это работает! Ошибка заключалась в том, что я сделал равно для строки, а не для UUID.
Есть лучший способ сделать это или это правильно?