Удалить элемент из другого списка - PullRequest
0 голосов
/ 09 марта 2019

У меня есть элемент с именем 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. Есть лучший способ сделать это или это правильно?

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