Карта ifPresent функция

Thirler спросил: 27 ноября 2017 в 06:03 в: java

Как я могу выполнить функцию для значения карты, только если оно присутствует, без внесения каких-либо изменений в карту? Я хочу сделать это, используя декларативный стиль 'Java 8', сравнимый с Optional.ifPresent().

Мой пример использования следующий:

Я получаю обновления (новые или удалено) к объектам частично, я хочу зарегистрировать эти обновления с их родителями. Для бухгалтерии у меня есть следующее:

Map<ParentId, Parent> parents = ...

При получении нового ребенка я делаю следующее:

parents.computeIfAbsent(child.getParentId(), k -> new Parent()).addChild(child));

Однако для удаления могу не могу найти декларативную функцию. Прямо вперед, я бы реализовал это следующим образом:

if(parents.containsKey(child.getParentId())
{
     parents.get(child.getParentId()).removeChild(child);
}

Или я мог бы обернуть значение в Optional:

Optional.ofNullable(parents.get(child.getParentId()).ifPresent(p -> p.removeChild(child));

не возвращает removeChild()):
parents.computeIfPresent(child.getParentId(), (k, v) -> v.removeChild());

Как я могу это сделать, или нет эквивалента Parent?

0 ответов